gpt4 book ai didi

Tensorflow批量标准化: tf. contrib.layers.batch_norm

转载 作者:行者123 更新时间:2023-11-30 08:42:54 25 4
gpt4 key购买 nike

我最近开始使用 Tensorflow,并一直在尽力适应环境。这真是太棒了!然而,使用 tf.contrib.layers.batch_norm 进行批量归一化有点棘手。现在,这是我正在使用的函数:

def batch_norm(x, phase):
return tf.contrib.layers.batch_norm(x,center = True, scale = True,
is_training = phase, updates_collections = None)

使用这个,我遵循了我在网上找到的大多数文档(还有问答),这使我得出以下结论:

1) is_training 对于训练应设置为 True,对于测试应设置为 false。这是有道理的!训练时,我收敛了(误差 < 1%,Cifar 10 数据集)。

但是在测试过程中,我的结果很糟糕(错误> 90%),除非我将(更新集合=无)作为参数添加到上面的批规范函数中。只有以此作为参数,测试才会给出我预期的错误。

我也确信使用以下内容进行培训:

update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops): # Ensures, Updating ops will perform before training
with tf.name_scope('Cross_Entropy'):
cross_entropy = tf.reduce_mean( # Implement Cross_Entropy to compute the softmax activation
tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv)) # Cross Entropy: True Output Labels (y_), Softmax output (y_conv)
tf.summary.scalar('cross_entropy', cross_entropy) # Graphical output Cross Entropy

with tf.name_scope('train'):
train_step = tf.train.AdamOptimizer(1e-2).minimize(cross_entropy) # Train Network, Tensorflow minimizes cross_entropy via ADAM Optimization

with tf.name_scope('Train_Results'):
with tf.name_scope('Correct_Prediction'):
correct_prediction = tf.equal(tf.argmax(y_conv, 1), tf.argmax(y_, 1)) # Check if prediction is wrong with tf.equal(CNN_result,True_result)
with tf.name_scope('Accuracy'):
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # Find the percent accuracy, take mean of correct_prediction outputs
tf.summary.scalar('accuracy', accuracy) # Graphical output Classification Accuracy

这应该确保批量归一化参数在训练期间更新。

所以这让我相信 update collections = None 只是我的批量标准化函数的一个很好的默认值,在测试过程中函数将确保不会调整任何批量标准化参数......我是对的吗?

最后:在测试阶段,打开和关闭批量标准化时获得良好结果(预期错误)是否正常?使用上面的批归一化函数,我能够很好地训练(is_training = True)和测试(is_training = False)。然而,在测试期间(is_training = True)我仍然能够获得很好的结果。这只是给我一种不好的感觉。有人可以解释为什么会发生这种情况吗?或者它是否应该发生?

感谢您的宝贵时间!

最佳答案

移动平均值

不稳定的衰减率(默认0.999)可能是训练性能相当良好但验证/测试性能较差的原因。尝试稍低的衰减率(0.99 或0.9)。另外,请尝试 zero_debias_moving_mean=True 以提高稳定性。

您还可以尝试不同的批量大小,看看验证性能是否有所提高。使用批量归一化时,大批量可能会破坏验证性能。请参阅this .

关于Tensorflow批量标准化: tf. contrib.layers.batch_norm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47953242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com