通过简单案例-深入理解深度学习中两种常用的归一化方法
Posted Tina姐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过简单案例-深入理解深度学习中两种常用的归一化方法相关的知识,希望对你有一定的参考价值。
数据归一化共有三种技术:Min-Max归一化、Z-score归一化和十进制标度归一化。
前两种在深度学习中使用的最多,本博客主要讲解前两种。
文章目录
1 最小最大规范化 Min-Max
最小-最大规范化也称为离散标准化,是对原始数据的线性变换
,将数据值映射到新的 [min, max] 之间.
假设集合A 值的范围为 [minA, maxA]。 通过最小-最大归一化将A的值映射到 [new_min A , new_max A ] 范围内,要怎么做?
v i ′ = v i − m i n A m a x A − m i n A ( n e w m a x A − n e w m i n A ) + n e w m i n A v_{i}^{'} = \\frac{v_i-min_A}{max_A-min_A}(newmaxA-newminA)+newminA vi′=maxA−minAvi−minA(newmaxA−newminA)+newminA
最小-最大归一化保留了原始数据值之间的关系。如果归一化的未来输入案例超出A的原始数据范围,它将遇到“越界”错误。
举例 生活中的例子
假设集合A 收入的最小值和最大值分别为 12,000 美元和 98,000 美元。我们想将收入映射到范围 [1, 100]。那么73,600 美元映射到多少?
73600
−
12000
98000
−
12000
(
100
−
1
)
+
1
=
71.9
\\frac{73600-12000}{98000-12000}(100-1)+1 = 71.9
98000−1200073600−12000(100−1)+1=71.9
举例 深度学习中的例子
假设集合A 是一张CT图像,最小值和最大值分别为 0 和 255。而神经网络希望输入的Tensor值范围为 [0,1]。我们该怎么进行映射?假设其中一个像素点的值为96,经过映射后为多少?
96 − 0 255 − 0 ( 1 − 0 ) + 0 = 0.376 \\frac{96-0}{255-0}(1-0)+0 = 0.376 255−096−0(1−0)+0=0.376
特别地,当我们新的集合范围为 [0, 1]时,我们可以简化公式
v
i
′
=
v
i
−
m
i
n
A
m
a
x
A
−
m
i
n
A
v_{i}^{'} = \\frac{v_i-min_A}{max_A-min_A}
vi′=maxA−minAvi−minA
这就是我们见得最多的归一化公式。在深度学习中,pytorch 就是通过ToTensor()将图像的值从 0 ~ 255 映射到 == 0~1==
举例 如何用Python写min-max归一化
import numpy as np
def min_max(x):
# x: numpy array
x = (x - np.min(x)) / (np.max(x) - np.min(x))
return x
测试一下
np.set_printoptions(4) # 保留4位小数
arr = np.array([0,23,45,89,234,255])
arr_norm = min_max(arr)
print(arr)
print(arr_norm)
[ 0 23 45 89 234 255]
[0. 0.0902 0.1765 0.349 0.9176 1. ]
2 z-score 标准分数
Z-Score 又叫 stand score, z-value, z-score, normal score, and standardized variable, 中文一般译作标准分数。
z-score 是对某一原始分值进行转换,变成的一个标准分值,该标准分值可使得原来无法比较的数值变得可比。
例如: 中国人小王身高 1.75 m,美国人 James 身高 1.85 m,日本人大郎身高1.75 m,排除国籍导致的差异,请问小王、James、大郎三个人谁更高?
直接从数值上比,当然是 James 最高。但是这里要求排除国籍导致的差异,什么意思?就是说,日本人可能全国的人都相对矮一些(不严谨,仅做例子),那么日本的 1.7 m 可能相当于中国的 1.75 m 和美国的 1.85 m。
所以不能直接比数字,而是要比每个人在各自国家国民身高背景下的一个标准身高。
这里,就要用到 z-score 标准化了。
z = x − u σ z = \\frac{x-u}{\\sigma} z=σx−u
这里的 x 为原始分值,z 为经过转换后的 z-score,μ 为总体样本空间的分值均值,σ 则为总体样本空间的标准差。
我们再来看一个例子:
例如:小红英语考了 90 分,语文考了 60 分,请问小红英语和语文哪个考的好? 同样的情况,如果直接比分数,当然是英语好。
但是一种显然易见的可能情况是,两门课的难度不一样,也许语文更难,大家都不及格,只有小红及格了;而英语很简单大家都是100分,只有小红90分。这样看来,好像小红的语文要考的更好一些。
那如何使用z分数进行比较呢?
假设语文全班平均成绩 40 分,标准差为 10,英语全班成绩 98 分,标准差为 5 。那么小红的语文成绩 “标准分值” 就是 (60 – 40)/10 = 2 ,而英语成绩“标准分值”就是 (90-98)/5 = -1.6。这样一比,英语成绩是远低于语文成绩的,可见小红的语文还是学的相当好的。
如何用Python写z-score
def normalize(x, mean, std):
x = (x-mean) / std
return x
z-score在深度学习中的应用
只要你使用过ImageNet预训练的模型,你绝对使用过z-score。记得在哪儿用的吗🤭
mean = [0.485, 0.456, 0.406]
std = [0.229, 0.224, 0.225]
这个均值和方差是不是很熟悉。
没错,这就是ImageNet数据集的均值和方差,很多情况下,我们对数据集进行归一化都使用的是ImageNet数据集的均值和方差。
transforms.Normalize(mean=mean, std=std)
这里的Normalize,其实就是做的z-score标准化。
文章持续更新,可以关注微信公众号【医学图像人工智能实战营】获取最新动态,一个关注于医学图像处理领域前沿科技的公众号。坚持已实践为主,手把手带你做项目,打比赛,写论文。凡原创文章皆提供理论讲解,实验代码,实验数据。只有实践才能成长的更快,关注我们,一起学习进步~
我是Tina, 我们下篇博客见~
白天工作晚上写文,呕心沥血
觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连
以上是关于通过简单案例-深入理解深度学习中两种常用的归一化方法的主要内容,如果未能解决你的问题,请参考以下文章