CNN 入門講解:什麼是標準化(Normalization)?
此文章首發於
卷積神經網路(CNN)入門講解----------------------------分割線------------------------------------------------------------
大家在看一些機器學習或者深度學習的文章時,在數據預處理的時候,會不會經常看到一個步驟:
(輸入數據-數據均值)/數據標準差
初學者的你可能就直接略過了
因為你覺得它就是一個簡單的線性變換,並沒有多複雜
但是
就像愛因斯坦的相對論:
E = mc^2
大道至簡
這個數據預處理的步驟在機器學習或者深度學習裡面,都是重中之重
其實,它是標準化(Normalization)的一種
今天的內容:
當然,標準化的方法這是最常用的。
Z-score 怎麼用python 代碼實現:
實現時有2種不同的方式:
(1),使用sklearn.preprocessing.scale()函數,直接將數據進行標準化。 (2),使用sklearn.preprocessing.StandardScaler類,其優點可以保存訓練數據中的參數(均值、方差),也可以直接使用其對象轉換(transform)其測試集數據。
標準化的方法有很多,還有歸一化,規範化等,具體都可以在 網上找到答案
其他參考資料:
【原】關於使用sklearn進行數據預處理 -- 歸一化/標準化/正則化數據標準化的方法與意義 - CSDN博客----------------------------分割線------------------------------------------------------------
下面我們來看看,在CNN中,我們為什麼要給圖像做標準化
很多時候我們的訓練圖片會出現下面的情況:
大家看上面兩隻豬,對於人來說,它就是兩隻一樣的豬,只是圖片的灰度或者曝光度不一樣罷了,於是我們都給它們都標註為社會人
咋一看,好像沒毛病
但是,雖然我們人眼看沒毛病,可是機器看的方式和我們不一樣,他們看的是對應圖片的像素值
由於曝光的,灰度等各種原因,他們像素值其實不一樣,那麼經過卷積層後,他們的特徵很可能不一樣
於是神經網路就尷尬了,特徵都不一樣,為啥標籤都一樣呢?
這樣,迷惑的神經網路就不知道怎麼對權值進行訓練了
另一種情況:
當然,我上面就是舉了兩個例子,還有很多情況需要進行標準化才能解決,標準化常用的是Z-Score, 記住,這是要減去自己數據的均值和除以自己的標準差(不是方差)
大家在用Fine-tune pretrained model,比如Imagenet, 程序裡面經常是減去的Imagenet的均值和方差,這樣是不對的,大家在跑程序的時候要注意了。
在公眾號里回復:標準化,可以獲得全部高清PPT哦!!
關於標準化在機器學習方面的應用,可以參考下面資料:
nnetInfo文章瀏覽parkson:R--數據標準化、歸一化、中心化處理網上有很多,大家可以自己找找。
希望大家多多點贊,謝謝啦。
有問題,歡迎提問。
推薦閱讀: