1

我一直在使用關於使用神經網絡進行關鍵點檢測的一些教程。我注意到,對於輸入(圖像),除以255是很常見的(歸一化爲[0,1],因爲值介於0和255之間)。但是對於目標(X/Y)座標,我已經注意到將它標準化爲[-1,1]更爲常見。任何這種差距的原因。正常化爲[0,1] vs [-1,1]

實施例:http://danielnouri.org/notes/2014/12/17/using-convolutional-neural-nets-to-detect-facial-keypoints-tutorial/

X = np.vstack(df['Image'].values)/255. # scale pixel values to [0, 1] 
y = (y - 48)/48 # scale target coordinates to [-1, 1] 
+1

應該在https://stats.stackexchange.com/上詢問這個問題,它確實與tensorflow或keras的功能沒有任何關係 – DJK

+0

事實上,關於機器學習和深度學習的技術不可知論問題更好在[交叉驗證](// stats.stackexchange.com)或[Data Science SE](// datascience.stackexchange.com)上詢問,這些領域的專家是。 –

回答

0

我認爲最常見的用於一般神經網絡圖像歸一化是爲了去除圖像的平均值和其標準偏差除以

X = (X - mean_dataset)/std_dataset 

我想關鍵點檢測問題不應該太過分。

查看性能差異可能很有趣。我的猜測是,與[0,1]歸一化相比,去除均值和除以std([-1,1])將會更快地收斂。

因爲在模型中的偏差會更小,因此需要較少的到達,如果他們是在0

0

據我初始化時間,在技術上應該不會有太大的差別你如何正火值。

但這些事情在ML技術中很重要。

將像素範圍從(0到255)規範化爲(0到1)會使收斂速度更快。在這裏你可以做-1和1之間的範圍。我在很多問題中都使用了這個範圍。並沒有這樣的問題。

但是對於輸出來說它有點棘手。由於您使用的激活功能,使用範圍0到1並不是一個好主意。 ReLU是max(0,x),當你提供負值時,它的效果會更好。這就是relu的全部意義。 tanh的取值範圍在-1和1之間。剩下的唯一選擇是使用sigmoid函數,與relu函數和tanh函數相比,sigmoid函數執行得並不好。 sigmoid的問題是梯度消失,並且它不是零中心,這給權重提供了一些鋸齒狀的漸變梯度更新。你可以找它here