Тест имеет плохие результаты при использовании BatchNorm - PullRequest
4 голосов
/ 02 ноября 2019

Я исследую Реснет с моим учителем, и мы сделали некоторые изменения. После модификации окончательная потеря - MSE, шаги обучения - 10000. Я использую AdamOptimizer и tf.layers.batch_normalization. Результат тренировки имеет хорошие показатели.

Но когда я тестирую, установите training=False, производительность будет ужасной.

Я искал много возможных ситуаций.

updated_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
    with tf.control_dependencies(updated_ops):
        lead_paras = optimizer.minimize(lead_loss, global_step=counter_paras)

У меня всегда есть этот код, это не ответ. И многие другие ответы не смогли решить мою проблему.

Модель такова:

inputs = conv1(inputs)
inputs = residual_block1(inputs) #some conv layer with residual
inputs = residual_block2(inputs)
inputs = tf.layers.batch_normalization(inputs=inputs,
                                       axis=3,
                                       momentum=0.95,
                                       epsilon=1e-5,
                                       center=True,
                                       scale=True,
                                       training=is_training)
inputs = tf.nn.relu(inputs) # the size is [batchsize, 16, 16, 32]
T1 = inputs[:, :, :, 0:16]
T2 = inputs[:, :, :, 16:32]
label1 = tf.zeros(shape=tf.shape(T1), dtype=tf.float32)
label2 = tf.ones(shape=tf.shape(T1), dtype=tf.float32)
lead_loss = tf.reduce_mean(tf.square(T1-label1))
nolead_loss = tf.reduce_mean(tf.square(T2-label2))
loss = lead_loss+nolead_loss
optimizer = tf.train.AdamOptimizer()
updated_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(updated_ops):
    lead_paras = optimizer.minimize(loss, global_step=counter_paras)

вот так.

результат

Я хочу T1 подход 1 и T2 подход 0. Результат обучения - это то, что мне нужно.

Я был бы очень признателен, если кто-то может помочь решить проблему.

...