此文章首发于
卷积神经网络(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----------------------------分割线------------------------------------------------------------
下面我们来看看,在CNN中,我们为什么要给图像做标准化
很多时候我们的训练图片会出现下面的情况:
大家看上面两只猪,对于人来说,它就是两只一样的猪,只是图片的灰度或者曝光度不一样罢了,于是我们都给它们都标注为社会人
咋一看,好像没毛病
但是,虽然我们人眼看没毛病,可是机器看的方式和我们不一样,他们看的是对应图片的像素值
由于曝光的,灰度等各种原因,他们像素值其实不一样,那么经过卷积层后,他们的特征很可能不一样
于是神经网络就尴尬了,特征都不一样,为啥标签都一样呢?
这样,迷惑的神经网络就不知道怎么对权值进行训练了
另一种情况:
当然,我上面就是举了两个例子,还有很多情况需要进行标准化才能解决,标准化常用的是Z-Score, 记住,这是要减去自己数据的均值和除以自己的标准差(不是方差)
大家在用Fine-tune pretrained model,比如Imagenet, 程序里面经常是减去的Imagenet的均值和方差,这样是不对的,大家在跑程序的时候要注意了。
在公众号里回复:标准化,可以获得全部高清PPT哦!!
关于标准化在机器学习方面的应用,可以参考下面资料:
nnetInfo文章浏览nnetinfo.com网上有很多,大家可以自己找找。
希望大家多多点赞,谢谢啦。
有问题,欢迎提问。