Почему у меня возникают проблемы с градусами даже при использовании Re sNet, Batchnorm, ReLU? (Tensorflow) - PullRequest
0 голосов
/ 15 января 2020

Я разработал простой 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)

, и это все еще дает мне взрывную потерю.

Проблема в том, что иногда это нормально и минимизирует потери, но иногда потеря взрывается.

1 Ответ

0 голосов
/ 15 января 2020

У вас слишком мало примеров. Попробуйте с сотнями примеров и более низкой скоростью обучения. Также попробуйте другой оптимизатор, например, Adam или Adadelta.

...