张量流中的批量归一化是否在训练期间使用运行平均值?

石英活化

我正在使用张量流神经网络找出批处理规范化的工作原理,并将其复制到我自己的库中。我遇到了这个奇怪的问题:

初始化神经网络层时,所有偏差(或在batchnorm-b​​eta的情况下)都设置为0,因此该层应仅将输入值乘以权重,就这样。现在,根据我对batchnorm的了解,在训练过程中,它根据所馈送的小批量计算层输入的均值和方差,然后将其输入到输入中:output =(input-mean)/ sqrt(variance + eps)。

因此,如果您的小批量生产的所有输入值都相同,那么在训练期间,batchnorm将从输入值中减去平均值(等于每个值),因此无论输入如何,网络都应输出0,对吗?

而且,事实并非如此。实际上,看起来在计算过程中所有均值均为0,方差为1,就好像使用这些值的移动平均值一样。因此,我不明白batchnorm的工作方式,或者不正确使用batchnorm。这是在我使用的代码中初始化的方式:

    layer= tflearn.fully_connected(layer, 10, weights_init=w_init)
    layer= tflearn.layers.normalization.batch_normalization(layer)
    layer= tflearn.activations.leaky_relu(layer)

另一个选择是在训练过程中使用不正确,但是我想先消除其他可能的解释。

阿戈斯特·比罗(Agost Biro)

TensorFlow批处理规范实现具有一些更新操作,这些更新操作默认情况下不包含在训练操作的依赖项中。您必须显式添加依赖项。引用文档:

[W]培训时,moving_meanmoving_variance需要更新。默认情况下,更新操作位于其中tf.GraphKeys.UPDATE_OPS,因此需要将它们作为依赖项添加到train_op另外,请务必batch_normalization在获取update_ops收藏之前添加所有操作否则,update_ops将为空,并且训练/推理将无法正常进行。例如:

  x_norm = tf.layers.batch_normalization(x, training=training)

  # ...

  update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
  with tf.control_dependencies(update_ops):
    train_op = optimizer.minimize(loss)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

张量流中的批量归一化:变量和性能

张量流中推断时的批次归一化

张量流中的默认在线或批量训练

python-归一化的密度图中平均值线的y轴极限

如何计算张量A在沿着张量流中由张量B指定的权重的轴上的加权平均值?

计算张量流中多个批次的精确移动平均值

如果批量归一化是模型的一部分,如何在张量流中对LSTM应用Monte Carlo Dropout?

如何根据Excel中的时间使用每日平均值进行数据透视?

带有 dropout 和/或批量归一化的 PyTorch 训练

对于张量流中的分类模型,是否可以在训练期间强加不对称成本函数?

tf.keras中的批次归一化不计算平均均值和平均方差

是否有更有效的方法使用流从 ResultSet (Java) 中的 int 列获取平均值

Matlab中矩阵的运行平均值

如何使用cvAvg或均值计算设置的ROI中像素的“单一”平均值/均值?

张量数组的归一化

批量归一化 (BN) 后使用 Leaky ReLu 是否有用

使用Java中的流对对象数组进行分组并计算平均值

使用每个平均资产的平均值的查询来查询存储在mongodb中的平均值的平均值

PyTorch张量的加权平均值

在C ++中运行经过训练的张量流模型

归一化为数据帧内对照组的平均值

使用张量流运行预训练模型的奇怪问题

查询以使用每个平均值的计数查找存储在mongodb中的平均值的平均值

熊猫的均值归一化

“一年中某天”数据的运行平均值

润滑日期间隔的平均值

滚动日期期间的平均值

无法在卷积层中同时使用偏差和批量归一化

Python CNN模型训练中的数据归一化