Batch Normalizationについて

510 views
Skip to first unread message

ぶた

unread,
Aug 28, 2018, 6:25:14 AM8/28/18
to Neural Network Console Users (JP)
学習完了後のevaluation時のBatch Normalizationレイヤーについて質問です。

evaluation時は、学習で得たparameters.h5に格納されたβ、γ、mean、varの値を使用して計算がなされるのか、バッチサイズ1と見なして改めてmeanとvarを求めそれらを使用して計算されるのか、どちらでしょうか。

小林由幸

unread,
Aug 30, 2018, 12:54:06 AM8/30/18
to Neural Network Console Users (JP)
BatchNormalizationのBatchStatプロパティがFalseに設定されている条件(評価時のデフォルト)では、学習時に計算済みのRunning meanとvariance(mean、ver)を用いて演算が行われます。

BatchNormalizationのBatchStatプロパティはデフォルトTrueで、学習時には常にTrueに設定する必要があります。
プロジェクトのデフォルト設定では、Evaluation実行時にはEDITタブのMainネットワークから自動生成されるMainRuntimeネットワークが用いられます。
MainRuntimeネットワークでは、Mainネットワーク内のBatchNormalizationレイヤーのBatchStatプロパティが自動的にFalseに設定されます。
このため、デフォルト設定でMainネットワークのみを定義して学習と評価を行う場合、評価時は学習時に計算済みのmean、varが用いられます。


CONFIGタブのExecutorのNetworkに自分で定義したネットワークを指定する場合、明示的に指定したネットワークのBatchNormalizationのBatchStatプロパティをFalseにする必要があります。
BatchStatプロパティがTrueのままである場合、評価時もバッチ内の平均、分散が用いられることになるため注意が必要です。

ぶた

unread,
Aug 30, 2018, 9:26:19 AM8/30/18
to Neural Network Console Users (JP)
ご回答ありがとうございます。
 
CONFIGタブのExecutorのNetworkに自分で定義したネットワークを指定する場合、明示的に指定したネットワークのBatchNormalizationのBatchStatプロパティをFalseにする必要があります。
BatchStatプロパティがTrueのままである場合、評価時もバッチ内の平均、分散が用いられることになるため注意が必要です。

とのことで、まさにこの操作でネットワークの出力が思い通りにならず困っていたところでした。
大変助かりました。ありがとうございました。
 
Reply all
Reply to author
Forward
0 new messages