使用BatchNorm

时间:2019-11-02 04:58:51

标签: python tensorflow batch-normalization

我正在与老师一起研究Resnet,我们做了一些更改。修改后,最终损失为MSE,训练步骤为10000。 我使用AdamOptimizertf.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)

像这样

result

我希望T1接近1而T2接近0。训练的结果就是我所需要的。

如果有人可以帮助解决问题,我将不胜感激。

0 个答案:

没有答案