現在ある学習時の重みのモデルの分類精度を評価するため、
Trainingが完了したところでOpen in Edit with weightを選択し、
Create training result で学習結果を複製し、
検証用のデータセットを用いてEvaluationを実行しました。
(学習のやり直しはしておりません)
評価用のデータセットは、
添付画像1のように、全てを検証データとして扱うようにratioを0:100にしています。
結果として、shuffle the order of the data にチェックを入れている時と、
そうでない時で、精度に大きく差が出ております。
(Accuracy チェック無:96% チェック有:98% 添付画像2、3)
データのシャッフル有無による精度の変動が、学習データについては
起こりうるのは分かりますが、
今回のケースのように、検証を行うデータセットに対して
精度が変わる原理が分からず、質問させて頂きました。
基本的に評価データの順序を変更しても同じ精度が得られるはずです。
等が考えられます。
画像を添付できなくて申し訳ないのですが、
畳み込み、バッチノルム、relu、MAXpooringを7回
繰り返した後、畳み込み、バッチノルム、アベレージプーリング、シグモイド、バイナリクロスエントロピーというような構成になっています。
ご指摘いただいた通り、バッチノルムのbatchstatはtrueに設定しています。
これはどのように設定したらEvaluationの再現性がえられますでしょうか?
現在添付の画像のようなネットワーク構造で
学習を行い、評価まで実行しています。
学習の際はbatch_norm層のbatch_statをtrueにしております。
ここで、以前指摘頂いた、batch_statをtrueにして
評価を実行すると、評価の際のミニバッチ内の他のデータの影響を受けるとのことだったので、
学習の際はbatch_statをtrueに、評価の際はfalseにして、
評価を実行してみたところ、
評価用データセットの作成時のshuffle the order of the data チェック有、無に関わらず
同じ評価結果となりました。
以前、学習の際batch_stat有、評価の際batch_stat有で評価まで行っていた際、
shuffle the order of the dataの有無で評価結果が変わってしまっていたのですが、
これは今回の学習の際batch_statをtrue、評価の際batch_statをfalseにした条件での
評価結果の方が正しいということでしょうか?
また、今後はNNCで作成したモデル(batch_normを使って学習)をpythonのコードに吐き出し、
そのpythonコード上で画像一枚ずつに対して推論を実行しようとしています。
この際も、再現性のある一定の推論結果を出したく考えておりますが、
この場合も、batch_statをfalseにすることが正しいでしょうか?
以上、長くなり申し訳ございませんが、
回答頂けたら幸いです。
はい、その通りです。
Neural Network ConsoleにおいてMainネットワークのみを定義した場合、
Mainネットワークから自動生成される評価用のMainValidationネットワーク、
推論実行用のMainRuntimeネットワークは、それぞれ自動的にBatchStatプロパティがFalseに設定されます。