TensorFlow 批归一化实现之间有什么区别?

What is the difference between the TensorFlow batch normalization implementations?

TensorFlow 似乎实现了至少 3 个版本的批量归一化:

这些都有不同的参数和文档。

它们之间有什么区别,我应该使用哪一个?

全部基于同一篇论文:http://arxiv.org/abs/1502.03167 所以他们应该做同样的事情。

一些函数在代码中移动,但保留旧版本以保持向后兼容性,您最终会得到不止一个版本。

我会推荐使用最简单的一个让你做你的项目(即 tf.nn.batch_normalization)。如果您需要 features/parameters 但未提供,请选择适合您的那个。

注意: tf.contrib.* 不保证保持向后兼容(api 可能会在未来版本中更改)。

他们其实很不一样。

  • nn.batch_normalization 执行基本操作(即简单的归一化)
  • layers.batch_normalization 是一个 batchnorm "layer",即它负责设置可训练参数等。归根结底,它是 nn.batch_normalization 的包装器。很有可能这是您想要使用的,除非您想自己设置变量等。

类似于nn.conv2dlayers.conv2d的区别,例如

至于 contrib 版本,我不能肯定地说,但在我看来它像是一个实验版本,带有一些 "regular" layers 中没有的额外参数一.