我正在与老师一起研究Resnet,我们做了一些更改。修改后,最终损失为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。训练的结果就是我所需要的。
如果有人可以帮助解决问题,我将不胜感激。