归一化(Normalization)
一般来说用的是min-max归一化,缩放到0-1之间,即:
X
i
−
X
min
X
max
−
X
min
\frac{X_{i}-X_{\min }}{X_{\max }-X_{\min }}
Xmax−XminXi−Xmin
对于图片来说,由于max是255,min是0,也就是直接除以255就可以完成归一化。
from skimage import io
image = io.imread('1.jpg')
image_norm = image / 255
io.imshow(image)
io.imshow(image_norm)
找张图片测试可以发现归一化前后的图片看起来是完全一样的,只是相应存储的数值不同。
在使用梯度下降法训练神经网络的时候,归一化可以加快梯度下降的求解速度,进而加快网络的收敛。
标准化(standardization)
将数据变换成均值为0,标准差为1的分布(但不一定为正态):
X
i
−
μ
σ
\frac{X_{i}-\mu}{\sigma}
σXi−μ
一般来说最常见的是这个:
transforms.Normalize(mean = (0.485, 0.456, 0.406), std = (0.229, 0.224, 0.225))
这个是根据ImageNet数据集计算的,可以作为通用的均值和方差。和归一化不同,标准化会更改图片的观感。
标准化能够使得数据的分布更加均匀,减少模型学到数据分布的可能性,提升模型的泛化能力。