学习 pytorch 的 transforms 一节中产生疑问:ToTensor
操作中图像数据满足 [0,255] 条件会进行线性归一化,映射到 [0,1]。在 ToTensor
操作后一般紧接着 Nomalize
操作,又进行了一次标准差归一化。既然已经归一化了一次,为什么还要再来一次?
以下是我在网络上找到的一些答案:
- 数据如果分布在 (0,1) 之间,可能实际的 bias,就是神经网络的输入b会比较大,而模型初始化时b=0的,这样会导致神经网络收敛比较慢,经过
Normalize
后,可以加快模型的收敛速度。
注:该回答是网络上一搜几乎就有的回答。
- 如果输入层 x 很大,在反向传播时候传递到输入层的梯度就会变得很大。梯度大,学习率就得非常小,否则会越过最优。在这种情况下,学习率的选择需要参考输入层数值大小,而直接将数据归一化操作,能很方便的选择学习率。一般归一化还会做减去均值除以方差的操作, 这种方式可以移除图像的平均亮度值 (intensity)。很多情况下我们对图像的亮度并不感兴趣,而更多地关注其内容,比如在目标识别任务中,图像的整体明亮程度并不会影响图像中存在的是什么物体。此时,在每个样本上减去数据的统计平均值可以移除共同的部分,凸显个体差异。
注:此为知乎作者【卓不凡】回答,链接:https://www.zhihu.com/question/293640354/answer/2078956333。
我自己尝试了下,确实图像亮度下降,移除了无关紧要的纹理,凸显了蚂蚁的主要特征。