gpt4 book ai didi

python - 当批量大小=1时批量归一化

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:27 25 4
gpt4 key购买 nike

当我使用批量归一化但设置 batch_size = 1 时会发生什么?

由于我使用 3D 医学图像作为训练数据集,由于 GPU 限制,批量大小只能设置为 1。通常,我知道,当batch_size = 1时,方差将为0。并且(x-mean)/variance会因为除以0而导致错误。

但是为什么我设置batch_size = 1时没有出现错误?为什么我的网络训练得和我预期的一样好?谁能解释一下吗?

Some people认为:

The ZeroDivisionError may not be encountered because of two cases. First, the exception is caught in a try catch block. Second, a small rational number is added ( 1e-19 ) to the variance term so that it is never zero.

但是some people不同意。他们说:

You should calculate mean and std across all pixels in the images of the batch. (So even batch_size = 1, there are still a lot of pixels in the batch. So the reason why batch_size=1 can still work is not because of 1e-19)

我检查了Pytorch源代码,从代码来看我认为后一种是正确的。

大家有不同意见吗???

最佳答案

variance will be 0

不,不会; BatchNormalization 仅计算关于单轴的统计信息(通常是 channel 轴,默认情况下=-1(最后一个));所有其他轴都折叠,即求和以求平均值;详细信息如下。

但是,更重要的是,除非您能明确证明其合理性,否则我建议不要将 BatchNormalizationbatch_size=1 一起使用;有强有力的理论理由反对它,并且多个出版物表明,batch_size 低于 32 时,BN 性能会下降,<=8 时会严重下降。简而言之,单个样本上“平均”的批处理统计数据在样本之间差异很大(高方差),并且 BN 机制无法按预期工作。

小批量替代方案:Batch Renormalization -- Layer Normalization -- Weight Normalization

<小时/>

实现详情:来自 source code :

reduction_axes = list(range(len(input_shape)))
del reduction_axes[self.axis]

最终,tf.nn.monents使用axes=reduction_axes调用,它执行reduce_sum来计算方差。然后,在 TensorFlow 后端中,均值方差passedtf.nn.batch_normalization返回训练或推理标准化输入。

换句话说,如果您的输入是(batch_size, height, width, depth,channels),或(1, height, width, depth,channels),然后 BN 将在 1heightwidthdeep 维度上运行计算。

方差可以为零吗? - 是的,如果任何给定 channel 切片(沿每个维度)的每个数据点都相同。但这对于真实数据来说几乎是不可能的。

<小时/>

其他答案:第一个答案具有误导性:

a small rational number is added (1e-19) to the variance

这在计算方差时不会发生,但在归一化时会添加方差;尽管如此,这几乎没有必要,因为方差远非零。此外,epsilon 项实际上被 Keras 默认为 1e-3;它在正则化方面发挥着作用,而不仅仅是避免零除。

<小时/>

更新:我未能解决一个重要的直觉问题,怀疑方差为 0;事实上,批量统计方差为零,因为只有一个统计 - 但“统计”本身涉及 channel +空间维度的均值和方差。换句话说,均值和方差(单个训练样本的)的方差为零,但均值和方差本身却不是零。

关于python - 当批量大小=1时批量归一化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59687789/

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