Tensorflow 中正确的批量归一化函数是什么?
What is right batch normalization function in Tensorflow?
在tensorflow 1.4中,我发现了两个做batch normalization的函数,它们看起来是一样的:
我应该使用哪个功能?哪个更稳定?
如doc所示,tf.contrib
是一个贡献模块,包含易失性或实验性代码。 function
完成后,它将从此模块中删除。现在有两个,为了兼容历史版本。
所以,推荐前者tf.layers.batch_normalization
。
补充一下,在 tensorflow 中还有其他几种方法可以进行批归一化:
tf.nn.batch_normalization
是一个低级操作。调用者负责自己处理 mean
和 variance
张量。
tf.nn.fused_batch_norm
是另一个低级操作,类似于前一个。不同之处在于它针对 4D 输入张量进行了优化,这是卷积神经网络中的常见情况。 tf.nn.batch_normalization
接受任何阶数大于 1 的张量。
tf.layers.batch_normalization
是对先前操作的高级包装。最大的区别是它负责创建和管理 运行 均值和方差张量,并在可能时调用快速融合运算。通常,这应该是您的默认选择。
tf.contrib.layers.batch_norm
是 batch norm 的早期实现,在它升级到核心 API(即 tf.layers
)之前。不推荐使用它,因为它可能会在未来的版本中被删除。
tf.nn.batch_norm_with_global_normalization
是另一个已弃用的操作。目前,将调用委托给 tf.nn.batch_normalization
,但将来可能会被取消。
- 最后,还有 Keras 层
keras.layers.BatchNormalization
,在 tensorflow 后端调用 tf.nn.batch_normalization
.
在tensorflow 1.4中,我发现了两个做batch normalization的函数,它们看起来是一样的:
我应该使用哪个功能?哪个更稳定?
如doc所示,tf.contrib
是一个贡献模块,包含易失性或实验性代码。 function
完成后,它将从此模块中删除。现在有两个,为了兼容历史版本。
所以,推荐前者tf.layers.batch_normalization
。
补充一下,在 tensorflow 中还有其他几种方法可以进行批归一化:
tf.nn.batch_normalization
是一个低级操作。调用者负责自己处理mean
和variance
张量。tf.nn.fused_batch_norm
是另一个低级操作,类似于前一个。不同之处在于它针对 4D 输入张量进行了优化,这是卷积神经网络中的常见情况。tf.nn.batch_normalization
接受任何阶数大于 1 的张量。tf.layers.batch_normalization
是对先前操作的高级包装。最大的区别是它负责创建和管理 运行 均值和方差张量,并在可能时调用快速融合运算。通常,这应该是您的默认选择。tf.contrib.layers.batch_norm
是 batch norm 的早期实现,在它升级到核心 API(即tf.layers
)之前。不推荐使用它,因为它可能会在未来的版本中被删除。tf.nn.batch_norm_with_global_normalization
是另一个已弃用的操作。目前,将调用委托给tf.nn.batch_normalization
,但将来可能会被取消。- 最后,还有 Keras 层
keras.layers.BatchNormalization
,在 tensorflow 后端调用tf.nn.batch_normalization
.