CNN 入门讲解:什么是标准化?

此文章首发于

卷积神经网络(CNN)入门讲解zhuanlan.zhihu.com图标

内容如有修改,不在此处修改,请关注知乎:蒋竺波

----------------------------分割线------------------------------------------------------------

大家在看一些机器学习或者深度学习的文章时,在数据预处理的时候,会不会经常看到一个步骤:

(输入数据-数据均值)/数据标准差

初学者的你可能就直接略过了

因为你觉得它就是一个简单的线性变换,并没有多复杂

但是

就像爱因斯坦的相对论:

E = mc^2

大道至简

这个数据预处理的步骤在机器学习或者深度学习里面,都是重中之重

其实,它是标准化(Normalization)的一种


今天的内容:

当然,标准化的方法这是最常用的。

Z-score 怎么用python 代码实现:

实现时有2种不同的方式:
(1),使用sklearn.preprocessing.scale()函数,直接将数据进行标准化。
(2),使用sklearn.preprocessing.StandardScaler类,其优点可以保存训练数据中的参数(均值、方差),也可以直接使用其对象转换(transform)其测试集数据。

标准化的方法有很多,还有归一化,规范化等,具体都可以在 网上找到答案


其他参考资料:

【原】关于使用sklearn进行数据预处理 -- 归一化/标准化/正则化www.cnblogs.com图标数据标准化的方法与意义 - CSDN博客blog.csdn.net图标

----------------------------分割线------------------------------------------------------------

下面我们来看看,在CNN中,我们为什么要给图像做标准化

很多时候我们的训练图片会出现下面的情况:

大家看上面两只猪,对于人来说,它就是两只一样的猪,只是图片的灰度或者曝光度不一样罢了,于是我们都给它们都标注为社会人

咋一看,好像没毛病

但是,虽然我们人眼看没毛病,可是机器看的方式和我们不一样,他们看的是对应图片的像素值

由于曝光的,灰度等各种原因,他们像素值其实不一样,那么经过卷积层后,他们的特征很可能不一样

于是神经网络就尴尬了,特征都不一样,为啥标签都一样呢?

这样,迷惑的神经网络就不知道怎么对权值进行训练了



另一种情况:

当然,我上面就是举了两个例子,还有很多情况需要进行标准化才能解决,标准化常用的是Z-Score, 记住,这是要减去自己数据的均值和除以自己的标准差(不是方差)

大家在用Fine-tune pretrained model,比如Imagenet, 程序里面经常是减去的Imagenet的均值和方差,这样是不对的,大家在跑程序的时候要注意了。

在公众号里回复:标准化,可以获得全部高清PPT哦!!

关于标准化在机器学习方面的应用,可以参考下面资料:

nnetInfo文章浏览nnetinfo.com图标parkson:R--数据标准化、归一化、中心化处理zhuanlan.zhihu.com图标

网上有很多,大家可以自己找找。

希望大家多多点赞,谢谢啦。

有问题,欢迎提问。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页