J.D*_*Doe 6 normalization tensorflow
批次归一化在训练阶段和测试阶段具有不同的行为。
例如,在tensorflow中使用tf.contrib.layers.batch_norm时,我们应该is_training在不同的阶段设置不同的值。
我的问题是:如果is_training=True在测试时仍然设置该怎么办?那就是说如果我在测试阶段仍然使用训练模式怎么办?
我提出这个问题的原因是,测试时未设置Pix2Pix和DualGAN的已发布代码is_training=False。而且,如果is_training=False在测试时设置了该值,则生成的图像的质量可能非常差。
有没有人可以解释一下?谢谢。
在训练期间,BatchNorm层尝试做两件事:
在理想情况下,可以在第二点使用整个数据集的总体统计信息。但是,这些是未知的,并且在训练过程中会发生变化。与此相关的还有其他一些问题。
一种变通方法是通过以下方式对输入进行归一化
gamma * (x - mean) / sigma + b
Run Code Online (Sandbox Code Playgroud)
基于小批量统计信息mean,sigma。
在培训过程中,小批量的统计数据的移动平均来近似人口的统计数据。
现在,原始的BatchNorm公式将整个数据集的近似均值和方差用于推理期间的归一化。由于网络是固定的,所以mean和的近似值variance应该很好。尽管现在使用人口统计数据似乎很有意义,但这是一个关键的变化:从小批量统计到整个培训数据的统计。
培训期间批次不空或批次很小时至关重要。(但是我也观察到了32个批次的批次)。
建议的BatchNorm隐式地假设这两个统计数据非常相似。特别是,在pix2pix或dualgan中对大小为1的微型批次的训练会给出关于人口统计信息的非常差的信息。在这种情况下,它们可能包含完全不同的值。
现在有了一个深层的网络,后期的层希望输入是标准化的批次(就小批量统计而言)。请注意,他们接受了这类特殊数据的培训。但是,使用整个数据集统计信息会违反推理过程中的假设。
如何解决这个问题?就像在您提到的实现中一样,在推理期间也可以使用小批量统计信息。或者使用 BatchReNormalization,它引入了2个附加术语来消除小批量和总体统计之间的差异,或者仅使用InstanceNormalization(用于回归任务),实际上与BatchNorm相同,但分别处理批处理中的每个示例,并且不使用人口统计数据。
我在研究期间也遇到了这个问题,现在将InstanceNorm层用于回归任务。
| 归档时间: |
|
| 查看次数: |
1297 次 |
| 最近记录: |