Tensorflow中的右批量归一化功能是什么?

时间:2017-12-28 04:56:56

标签: python tensorflow neural-network deep-learning batch-normalization

在tensorflow 1.4中,我找到了两个进行批量标准化的函数,它们看起来相同:

  1. tf.layers.batch_normalizationlink
  2. tf.contrib.layers.batch_normlink
  3. 我应该使用哪种功能?哪一个更稳定?

2 个答案:

答案 0 :(得分:39)

只是要添加到列表中,还有几种方法可以在tensorflow中进行批量规范:

  • tf.nn.batch_normalization是一个低级操作。调用者自己负责处理meanvariance张量。
  • tf.nn.fused_batch_norm是另一个低级操作系统,类似于前一个操作系统。不同之处在于它针对4D输入张量进行了优化,这是卷积神经网络中的常见情况。 tf.nn.batch_normalization接受任何等级大于1的张量。
  • tf.layers.batch_normalization是以前操作系统的高级包装器。最大的区别在于它负责创建和管理运行均值和方差张量,并在可能的情况下调用快速融合运算。通常,这应该是默认选择
  • tf.contrib.layers.batch_norm是批量规范的早期实现,在它逐渐进入核心API之前(即tf.layers)。建议不要使用它,因为它可能会在将来的版本中删除。
  • tf.nn.batch_norm_with_global_normalization是另一个弃用的操作。目前,将呼叫委托给tf.nn.batch_normalization,但将来可能会被拒绝。
  • 最后,还有Keras图层keras.layers.BatchNormalization,如果张量流后端调用tf.nn.batch_normalization

答案 1 :(得分:5)

doc所示,Multiple markers at this line - The method subscribe(Consumer<? super String>) in the type Flux<String> is not applicable for the arguments (elems::add) - The type List<Integer> does not define add(String) that is applicable here 是一个包含易失性或实验性代码的贡献模块。 tf.contrib完成后,它将从此模块中删除。现在有两个,以便与历史版本兼容。

因此,建议使用前function