データセットシャッフルの有無によるEvaluationの再現性について

665 views
Skip to first unread message

中村聡

unread,
May 24, 2018, 4:41:11 AM5/24/18
to Neural Network Console Users (JP)

標題の件について伺いたく存じます。

現在ある学習時の重みのモデルの分類精度を評価するため、

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)

データのシャッフル有無による精度の変動が、学習データについては

起こりうるのは分かりますが、

今回のケースのように、検証を行うデータセットに対して

精度が変わる原理が分からず、質問させて頂きました。

キャプチャ2.JPG
キャプチャ3.JPG
1527150931589_キャプチャ.JPG

小林由幸

unread,
May 30, 2018, 12:53:27 AM5/30/18
to Neural Network Console Users (JP)

基本的に評価データの順序を変更しても同じ精度が得られるはずです。

評価データの順序を変更して精度が変わる可能性として、
  • 推論に用いるネットワークにDropoutなど乱数を用いるレイヤーが含まれている
  • 推論に用いるネットワークにBatchStatがTrueに設定されたBatchNormalizationなど、Mini batch内の他のデータの影響を受けるレイヤーが含まれている

等が考えられます。

上記の現象はどのようなプロジェクトで発生しているのでしょうか。

中村聡

unread,
May 30, 2018, 3:43:26 AM5/30/18
to Neural Network Console Users (JP)
返信ありがとうございます。

画像を添付できなくて申し訳ないのですが、
畳み込み、バッチノルム、relu、MAXpooringを7回
繰り返した後、畳み込み、バッチノルム、アベレージプーリング、シグモイド、バイナリクロスエントロピーというような構成になっています。

ご指摘いただいた通り、バッチノルムのbatchstatはtrueに設定しています。

これはどのように設定したらEvaluationの再現性がえられますでしょうか?

中村聡

unread,
Jun 6, 2018, 3:57:39 AM6/6/18
to Neural Network Console Users (JP)

現在添付の画像のようなネットワーク構造で

学習を行い、評価まで実行しています。

学習の際は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にすることが正しいでしょうか?

以上、長くなり申し訳ございませんが、

回答頂けたら幸いです。

ネットワーク.png

小林由幸

unread,
Jun 12, 2018, 9:30:18 PM6/12/18
to Neural Network Console Users (JP)
> これは今回の学習の際batch_statをtrue、評価の際batch_statをfalseにした条件での
> 評価結果の方が正しいということでしょうか?

はい、その通りです。
Neural Network ConsoleにおいてMainネットワークのみを定義した場合、
Mainネットワークから自動生成される評価用のMainValidationネットワーク、
推論実行用のMainRuntimeネットワークは、それぞれ自動的にBatchStatプロパティがFalseに設定されます。


> また、今後はNNCで作成したモデル(batch_normを使って学習)をpythonのコードに吐き出し、
> そのpythonコード上で画像一枚ずつに対して推論を実行しようとしています。
> この際も、再現性のある一定の推論結果を出したく考えておりますが、
> この場合も、batch_statをfalseにすることが正しいでしょうか?

はい、こちらもその通りです。
Neural Network ConsoleのPythonコードのExport機能を用いてコードを生成した場合、
network関数の引数test(推論実行時かどうかを示す)をtrueに設定することで、
batch_statをfalseにするようなコードが生成されているかと思います。
Reply all
Reply to author
Forward
0 new messages