批量标准化中的维度

时间:2017-04-14 13:29:19

标签: python-2.7 tensorflow conv-neural-network batch-normalization

我试图在 Tensorflow 中构建一个通用的批量规范化函数。

我学习了article中的批量规范化,我觉得非常友好。

我对比例 beta 变量的维度有疑问:在我的情况下,批量标准化应用于每个卷积层的每次激活,因此,如果我有作为卷积层的输出一个尺寸为

的游标
[57,57,96]

我需要比例 beta 与卷积层输出具有相同的维度,对吗?

这是我的功能,该计划有效,但我不知道是否正确

def batch_normalization_layer(batch):
   # Calculate batch mean and variance
    batch_mean, batch_var = tf.nn.moments(batch, axes=[0, 1, 2])

    # Apply the initial batch normalizing transform
    scale = tf.Variable(tf.ones([batch.get_shape()[1],batch.get_shape()[2],batch.get_shape()[3]]))
    beta = tf.Variable(tf.zeros([batch.get_shape()[1],batch.get_shape()[2],batch.get_shape()[3]]))

    normalized_batch = tf.nn.batch_normalization(batch, batch_mean, batch_var, beta, scale, 0.0001)

    return normalized_batch

1 个答案:

答案 0 :(得分:1)

来自tf.nn.batch_normalization的文档:

  

均值,方差,偏移和比例都预计为两个中的一个   形状:

     

一般来说,它们可以具有相同数量的维度   输入x,尺寸与x相同,尺寸不相同   标准化('深度'维度)和维度1   正在规范化的其他人。在这种情况下的均值和方差   通常是tf.nn.moments(...,keep_dims = True)的输出   在训练期间,或在推理期间运行平均值。

     

在   常见的情况是'深度'维度是最后一个维度   输入张量x,它们可以是相同大小的一维张量   作为'深度'尺寸。例如,对于普通人来说就是这种情况   [批次,深度]完全连接层的布局,以及[批次,高度,   卷积的宽度,深度]。在这种情况下的均值和方差   通常是tf.nn.moments(...,keep_dims = False)的输出   在推理期间进行训练或运行平均值。

使用您的值(scale = 1.0和offset = 0),您也可以只提供值None