张量流中的批量归一化

2024-04-04

我注意到张量流的 api 中已经有批量归一化函数。但我不明白的一件事是如何更改训练和测试之间的程序?

批量归一化在测试期间的行为与训练期间的行为不同。具体来说,在训练期间使用固定的均值和方差。

某处有一些好的示例代码吗?我看到了一些,但是对于作用域变量,它变得令人困惑


你是对的,tf.nn.batch_normalization仅提供实现批量归一化的基本功能。您必须添加额外的逻辑来跟踪训练期间的移动均值和方差,并在推理期间使用经过训练的均值和方差。你可以看看这个example https://github.com/tensorflow/models/blob/master/inception/inception/slim/ops.py#L116对于一个非常通用的实现,但是一个不使用的快速版本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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

张量流中的批量归一化 的相关文章

随机推荐