Я разработал простой sythenti c data
tempdataset = np.random.normal(0.0,1.0,[20,10])
templabelset = np.random.normal(0.0,1.0,[20,10])
, чтобы было 20 обучающих примеров, а вход NN будет иметь размер 10
. простой 10-слойный слой Re sNet с batchnorm, активация ReLu
def resnet_block(self, input_data, num_nodes):
temp = tf.keras.layers.Dense(units=num_nodes)(input_data)
temp = tf.keras.layers.BatchNormalization()(temp)
temp2 = tf.keras.layers.Add()([input_data, temp])
temp3 = tf.keras.layers.Activation(activation=tf.keras.activations.relu)(temp2)
return temp3
def create_model(self):
network = tf.keras.layers.Dense(10,tf.keras.activations.relu)(self.input_vec)
network = tf.keras.layers.BatchNormalization()(network)
for i in range(0, 10):
network = self.resnet_block(network, 10)
network = tf.keras.layers.Dense(10, tf.keras.activations.linear)(network)
return network
def optimize(self, dataset, labelset, ln, epoch):
cost = tf.reduce_mean((self.network - self.label_vec)**2)
train_step = tf.train.GradientDescentOptimizer(ln).minimize(cost)
for i in range(epoch):
_, loss = self.session.run([train_step, cost], feed_dict={self.input_vec: dataset, self.label_vec: labelset})
print(' current epoch ', i, ' and loss at ' , loss)
здесь, self.input_ve c - это tf.placeholder
, а затем, если бы мне пришлось оптимизировать это через
with tf.Session() as sess:
NN = ResNet(..... constructors initialization.....)
sess.run(tf.global_variables_initializer())
NN.optimize(tempdataset,templabelset,0.01,10000)
Я быстро получаю потери, взрывающиеся в бесконечность.
Я перепробовал все варианты (BN, ReLU, Add), например (Add -> Batch -> ReLU)
, и это все еще дает мне взрывную потерю.
Проблема в том, что иногда это нормально и минимизирует потери, но иногда потеря взрывается.