1

私はキーポイント検出のためのニューラルネットワークの使用に関するいくつかのチュートリアルを行ってきました。私は入力(画像)に対して、255で割ることは非常に一般的であることに気付いています(値は0から255までの値なので、[0,1]に正規化します)。しかし、ターゲット(X/Y)の座標については、[-1,1]に正規化する方が一般的です。この不一致の理由。[0,1]対[-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/で尋ねる必要があります。テンソルフローやケラスの機能には実際には関係ありません。 – DJK

+0

実際、機械学習と深い学習についての技術に依存しない質問が優れています[Cross Validated](// stats.stackexchange.com)または[Data Science SE](// datascience.stackexchange.com)で、これらのフィールドの専門家が尋ねられます。 –

答えて

0

私は一般的に、ニューラルネットワークのための画像正規化のための最も一般的だと思うが、画像の平均値を除去することで、その標準偏差で割る

X = (X - mean_dataset)/std_dataset 

と思いますキーポイントの検出の問題はそれほど異なってはいけません。

パフォーマンスの違いを確認するのは面白いかもしれません。私の推測では、平均を取り除き、標準偏差([-1,1])で割ることは、[0,1]正規化と比較してより迅速に収束するということです。

モデルの偏りが小さくなるので、彼らは私による0

0

で初期化される場合には到達するために、より少ない時間が必要になりますので、技術的にはあなたが正規化されている方法に大きな違いがあってはなりません値。

しかし、これらのことはML技術で重要です。

ピクセル範囲を(0〜255)から(0〜1)に正規化すると、収束速度が速くなります。ここで-1と1の間の範囲にすることもできます。私は多くの問題でこの範囲を使いました。そのような問題はありません。

出力は少しトリッキーです。範囲0〜1を使用することは、使用しているアクティベーション機能のために良いアイデアではありません。 ReLUはmax(0、x)で、負の値を入力するとより効果的です。それは、reluの全体のポイントです。また、tanhは-1と1の間の値をとります。残っている唯一の選択肢は、relu関数とtanh関数に比べてうまく機能しないsigmoid関数を使用することです。 S字状の問題は、勾配が消えていくことであり、それは、ゼロを中心としていないので、重みに対していくらかのジグザグの勾配の更新を与える。あなたはそれを探すことができますhere