0

我想在Tensorflow中建立一个广义的批量标准化函数。尺寸批量标准化

我在这个article学习批量标准化,我发现很亲切。

我与规模的β变量的尺寸的问题:在我的情况下批标准化被施加到每个卷积层的每个激活,因此,如果我有作为卷积层一个的输出与尺寸tersor:

[57,57,96] 

我需要规模测试具有相同的尺寸卷积层输出,是否正确?

这里是我的功能,该程序的作品,但我不知道是否是正确的

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

tf.nn.batch_normalization文档:

均值,方差,偏移量和规模都有望属于两种形状之一: 形状:

在所有通用性中,它们可以具有与 输入x相同的维数,并且具有相同的大小es表示对于不是 (“深度”维度)归一化的维度,而对于其他规范化的 维度为1。在这种情况下的平均值和方差 通常是训练期间tf.nn.moments(...,keep_dims = True) 的输出,或者是推理期间的平均值。

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

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