通过简单案例-深入理解深度学习中两种常用的归一化方法

数据归一化共有三种技术: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=maxAminAviminA(newmaxAnewminA)+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 98000120007360012000(1001)+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 2550960(10)+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=maxAminAviminA

这就是我们见得最多的归一化公式。在深度学习中,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=σxu

这里的 x 为原始分值,z 为经过转换后的 z-score,μ 为总体样本空间的分值均值,σ 则为总体样本空间的标准差。

我们再来看一个例子:

例如:小红英语考了 90 分,语文考了 60 分,请问小红英语和语文哪个考的好? 同样的情况,如果直接比分数,当然是英语好。

但是一种显然易见的可能情况是,两门课的难度不一样,也许语文更难,大家都不及格,只有小红及格了;而英语很简单大家都是100分,只有小红90分。这样看来,好像小红的语文要考的更好一些。
在这里插入图片描述

那如何使用z分数进行比较呢?

假设语文全班平均成绩 40 分,标准差为 10,英语全班成绩 98 分,标准差为 5 。那么小红的语文成绩 “标准分值” 就是 (60 – 40)/10 = 2 ,而英语成绩“标准分值”就是 (90-98)/5 = -1.6。这样一比,英语成绩是远低于语文成绩的,可见小红的语文还是学的相当好的。

z-score参考链接

如何用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, 我们下篇博客见~

白天工作晚上写文,呕心沥血

觉得写的不错的话最后,求点赞,评论,收藏。或者一键三连
在这里插入图片描述

评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tina姐

我就看看有没有会打赏我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值