Feature Scaling
由于原始数据值的范围差异很大,因此在某些机器学习算法中,如果没有归一化,目标函数将无法正常工作。例如,许多分类器通过欧几里得距离来计算两点之间的距离。如果其中一个要素的取值范围较广,则该距离将受此特定要素支配。因此,所有特征的范围应归一化,以使每个特征对最终距离的贡献大致成比例
可以使得梯度下降收敛更快
如果将正则化用作损失函数的一部分,则数据归一化也很重要(以便适当地对系数进行惩罚)
x = x − x ˉ σ x = \frac{x-\bar{x}}{\sigma } x=σx−xˉ
又叫标准化Standardization
,处理后的数据满足标准正态分布
可见,归一化包含标准化,标准化只是归一化的一种
x = x − x m i n x m a x − x m i n x = \frac{x-x_{min}}{x_{max}-x_{min}} x=xmax−xminx−xmin
是一种线性的归一化方法,它的特点是不会对数据分布产生影响。
当数据集的分布最大值和最小值不稳定时,结果输出可能也会不稳定。
该方法在图像处理上很常用,因为大部分的图像像素值为x∈[0, 255]
Non-linear normalization
包含log
、exp
、arctan
、sigmoid
等非线性函数,选择时取决于期望的输出范围:
log()
在[0,1]
上有很强的区分度arctan()
可以将任意实数转换到[-π/2, π/2]
区间sigmoid()
可以将任意实数映射到(0, 1)
区间Length-one normalization
x = x ∣ ∣ x ∣ ∣ x = \frac{x}{\left | \left | x \right | \right |} x=∣∣x∣∣x
将特征转为单位向量的形式来剔除特征强度的影响
测试集归一化所用均值和标准差的必须与train dataset 的input
相同,保证数据是同分布的
test set
和train set
是同分布的数据target
归一化input
经过target
下采样而来利用target下采样得到input,此时,两者本身就是同分布的(如img 1
),以至于在很多SR Task中,并没有采用normalize操作
若要进行normalize,两者可采用相同的均值和标准差
input
和target
都为Raw images
img 2
中:
此时,对于input和target应当采用不同的均值和标准差[即img 2
计算的结果],使得它们能够满足(0,1)
正态分布
def Dataset_transform_norm(imgs):
if imgs == 'LR':
norms = Normalize((0.1815, 0.0378, 0.0000), (0.1599, 0.0896, 1.0000)) # G通道无信息,所以标准差不能为0,因为分母不能为0
elif imgs == 'HR_2':
norms = Normalize((0.1290, 0.0367, 0.0000), (0.1053, 0.0830, 1.0000))
else:
norms = Normalize((0.1058, 0.0366, 0.0000), (0.0906, 0.0841, 1.0000))
return Compose([
ToTensor(),
norms
])
归一化后,满足正态分布,如img 3
:
pytorch
中的归一化在pytorch
中用均值和标准差对张量图像进行归一化
torchvision.transforms.Normalize(mean, std, inplace=False)
所以,在数据预处理时有:
transform_train = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize((0.4914, 0.4822, 0.4465), (0.2023, 0.1994, 0.2010)),
])
对于RGB
图像,计算均值与标准差的代码calculate_mean_std.py:
通过对General100数据集进行计算可知
R通道 | G通道 | B通道 | |
---|---|---|---|
均值 | 0.5525 | 0.4983 | 0.4047 |
标准差 | 0.2432 | 0.2403 | 0.2482 |
之后,便可利用计算好的均值和标准差放入到transforms.Normalize
中做归一化处理了
标准差 | 0.2432 | 0.2403 | 0.2482 |
[外链图片转存中…(img-PH7cnKus-1606997453423)]
之后,便可利用计算好的均值和标准差放入到transforms.Normalize
中做归一化处理了
Write by
Gqq