gpt4 book ai didi

tensorflow - 如果测试时在训练模式下使用批量归一化怎么办?

转载 作者:行者123 更新时间:2023-12-03 22:54:57 28 4
gpt4 key购买 nike

Batch Normalization 在训练阶段和测试阶段有不同的行为。

例如,当使用 tf.contrib.layers.batch_norm 时在tensorflow中,我们应该为is_training设置不同的值在不同的阶段。

我的 问题 是:如果我仍然设置is_training=True怎么办?测试时?也就是说如果我在测试阶段仍然使用训练模式怎么办?

之所以提出这个问题,是因为Pix2Pix的公开代码和 DualGAN不设置is_training=False测试时。并且似乎如果 is_training=False测试时设置,生成的图像质量可能很差。

有没有人可以解释一下?谢谢。

最佳答案

在训练期间,BatchNorm 层尝试做两件事:

  • 估计整个训练集的均值和方差(总体统计)
  • 对输入的均值和方差进行归一化,使它们表现得像高斯

  • 在理想情况下,可以在第二点使用整个数据集的总体统计量。但是,这些是未知的,并且在训练期间会发生变化。这也有一些其他问题。

    A 解决方法 正在对输入进行归一化
    gamma * (x - mean) / sigma + b

    基于 小批量 统计 mean , sigma .

    在训练期间,使用小批量统计的运行平均值来近似 人口 统计数据。

    现在,原始 BatchNorm 公式使用 的近似均值和方差。整个推理过程中用于归一化的数据集。由于网络是固定的, mean 的近似值和 variance应该还不错。虽然现在使用人口统计似乎很有意义,但这是一个关键的变化:从小批量统计到整个训练数据的统计。

    在训练期间批次不是 iid 或批次大小非常小时,这一点至关重要。 (但我也观察到大小为 32 的批次)。

    提议的 BatchNorm 隐含地简单地假设两个统计数据非常相似。特别是,在 pix2pix 或 dualgan 中对大小为 1 的小批量进行训练时,会提供关于总体统计数据的非常糟糕的信息。在这种情况下,它们可能包含完全不同的值。

    现在有了一个深度网络,后期层期望输入是标准化的批次(在小批量统计的意义上)。请注意,他们接受过此类特定数据的培训。但是在推理过程中使用整个数据集的统计数据违反了假设。

    如何解决这个问题?也可以在推理过程中使用小批量统计信息,就像您提到的实现一样。或使用 BatchReNormalization它引入了 2 个额外的术语来消除小批量和总体统计数据之间的差异
    或者简单地使用 InstanceNormalization(用于回归任务),它实际上与 BatchNorm 相同,但单独处理批次中的每个示例,也不使用总体统计数据。

    我在研究期间也遇到了这个问题,现在将 InstanceNorm 层用于回归任务。

    关于tensorflow - 如果测试时在训练模式下使用批量归一化怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46290930/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com