use*_*117 5 tensorflow recurrent-neural-network
我注意到api中已有批量规范化函数用于tensorflow.但我不明白的一件事是如何改变训练和测试之间的程序?
批量标准化在测试期间的行为与训练期间不同.具体而言,在训练期间使用固定的均值和方差.
某处有一些很好的示例代码吗?我看到了一些,但是使用范围变量会让人感到困惑
你是对的,它tf.nn.batch_normalization提供了实现批量标准化的基本功能.您必须添加额外的逻辑以跟踪训练期间的移动方式和差异,并在推理期间使用训练的均值和方差.您可以查看此示例以获得非常通用的实现,但是不使用的快速版本gamma在此处:
beta = tf.Variable(tf.zeros(shape), name='beta')
moving_mean = tf.Variable(tf.zeros(shape), name='moving_mean',
trainable=False)
moving_variance = tf.Variable(tf.ones(shape),
name='moving_variance',
trainable=False)
control_inputs = []
if is_training:
mean, variance = tf.nn.moments(image, [0, 1, 2])
update_moving_mean = moving_averages.assign_moving_average(
moving_mean, mean, self.decay)
update_moving_variance = moving_averages.assign_moving_average(
moving_variance, variance, self.decay)
control_inputs = [update_moving_mean, update_moving_variance]
else:
mean = moving_mean
variance = moving_variance
with tf.control_dependencies(control_inputs):
return tf.nn.batch_normalization(
image, mean=mean, variance=variance, offset=beta,
scale=None, variance_epsilon=0.001)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2087 次 |
| 最近记录: |