【问题标题】:dimensions in batch normalization批量标准化中的维度
【发布时间】:2017-04-14 13:29:19
【问题描述】:

我正在尝试在 Tensorflow 中构建一个通用的批量标准化函数。

我在这个article 中学习批量标准化,我觉得这很亲切。

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

[57,57,96]

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

这是我的功能,程序可以运行,但我不知道是否正确

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

【问题讨论】:

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


    【解决方案1】:

    来自tf.nn.batch_normalization的文档:

    mean、variance、offset 和 scale 都应该是两个之一 形状:

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

    在 '深度'维度是最后一个维度的常见情况 输入张量 x,它们可能是相同大小的一维张量 作为“深度”维度。例如常见的情况就是这样 [batch, depth] 全连接层的布局,以及 [batch, height, 宽度,深度]用于卷积。在这种情况下,均值和方差将 通常是 tf.nn.moments(..., keep_dims=False) 期间的输出 推理期间的训练或运行平均值。

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

    【讨论】:

      猜你喜欢
      • 2021-08-17
      • 2018-04-09
      • 2017-10-21
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 2019-08-21
      • 2020-04-26
      相关资源
      最近更新 更多