【发布时间】:2020-04-26 03:30:04
【问题描述】:
当我使用批量标准化但设置batch_size = 1 时会发生什么?
因为我使用 3D 医学图像作为训练数据集,所以由于 GPU 的限制,batch size 只能设置为 1。通常情况下,我知道batch_size = 1时,方差为0。而(x-mean)/variance会因为被0除而导致错误。
但是为什么我设置batch_size = 1时没有出现错误呢?为什么我的网络训练得和我预期的一样好?谁能解释一下?
Some people 认为:
ZeroDivisionError可能不会遇到,因为有两种情况。首先,异常在trycatch 块中被捕获。其次,将一个小的有理数 (1e-19) 添加到方差项中,使其永远不会为零。
但some people 不同意。他们说:
您应该计算批次图像中所有像素的均值和标准差。 (所以即使是
batch_size = 1,batch中的像素还是很多的。所以batch_size=1还能工作的原因不是1e-19)
我检查了 Pytorch 源代码,从代码中我认为后一个是对的。
有没有人有不同意见???
【问题讨论】:
-
ZeroDivisionError可能不会遇到,因为有两种情况。首先,异常在try catch块中被捕获。其次,将一个小的有理数 (1e-19) 添加到方差项中,使其永远不会为零。检查源代码。 -
@ShubhamPanchal 在计算
variance本身时没有添加任何内容,但在归一化中到添加了1e-3方差,主要用于正则化 -
更新了答案;我错过了你问题的一个角度。
标签: python tensorflow keras deep-learning batch-normalization