Python 什么是Tensorflow中正确的批处理规范化函数?

Python 什么是Tensorflow中正确的批处理规范化函数?,python,tensorflow,neural-network,deep-learning,batch-normalization,Python,Tensorflow,Neural Network,Deep Learning,Batch Normalization,在tensorflow 1.4中,我发现了两个执行批处理规范化的函数,它们看起来相同: tf.layers.batch\u规范化() tf.contrib.layers.batch\u norm() 我应该使用哪个函数?哪个更稳定?如中所示,tf.contrib是一个包含易失性或实验性代码的贡献模块。当功能完成时将从此模块中删除。现在有两种,为了与历史版本兼容 因此,建议使用前一种tf.layers.batch\u normalization。只需添加到列表中,在tensorflow中还有几种方

在tensorflow 1.4中,我发现了两个执行批处理规范化的函数,它们看起来相同:

  • tf.layers.batch\u规范化
    ()
  • tf.contrib.layers.batch\u norm
    ()
  • 我应该使用哪个函数?哪个更稳定?

    如中所示,
    tf.contrib
    是一个包含易失性或实验性代码的贡献模块。当
    功能完成时
    将从此模块中删除。现在有两种,为了与历史版本兼容


    因此,建议使用前一种
    tf.layers.batch\u normalization

    只需添加到列表中,在tensorflow中还有几种方法可以执行批处理规范:

    • 是一个低级op。调用者负责处理
      均值
      方差
      张量本身
    • 是另一个低级操作,与前一个类似。不同之处在于它针对4D输入张量进行了优化,这是卷积神经网络中的常见情况<代码>tf.nn.batch_归一化接受任何秩大于1的张量
    • 是对以前的ops的高级包装。最大的区别在于它负责创建和管理运行的均值和方差张量,并在可能的情况下调用快速融合运算。通常,这应该是您的默认选择
    • 是批处理规范的早期实现,在它升级到核心API之前(即,
      tf.layers
      )。不建议使用它,因为在将来的版本中可能会删除它
    • 是另一个不推荐使用的操作。目前,将调用委托给
      tf.nn.batch\u normalization
      ,但将来可能会放弃
    • 最后,还有Keras层,对于tensorflow后端,它调用
      tf.nn.batch\u normalization

    谢谢。我接受了。我只想问你关于均值和方差的问题。我如何管理你提到的均值和方差?刚刚将_training flag设置为False?通过管理,我的意思是:创建正确形状的变量,并从批次中累积运行平均值/方差。这有点乏味,这就是为什么调用高级函数更容易的原因。在这种情况下,您只需要设置
    training
    属性。对于未来的读者,本文很好地介绍了如何手动管理均值/方差: