バッチ正規化の効果

前書き

以前バッチ正規化の記事を書いたけど使用する場合と使用しない場合の比較を書き忘れていたので書く。

 

比較対象は

akikanr.hatenablog.com

 

でバッチ正規化をする場合としない場合で比較する。

 

 

バッチ正規化をした場合

比較対象の記事ではバッチ正規化を施した状態の正解率を書いているが比較のためここで再度記述する

 

tep 0, training accuracy 0.113636 
step 1000, training accuracy 0.997727 
step 2000, training accuracy 0.997727 
step 3000, training accuracy 0.997727 
step 4000, training accuracy 0.997727 
step 5000, training accuracy 0.997727 
step 6000, training accuracy 0.995454 
step 7000, training accuracy 0.997727 
step 8000, training accuracy 0.997727 
step 9000, training accuracy 0.997727

汎化性能は以下の通り 
test accuracy 0.878788

 

バッチ正規化をしなかった場合

step 0, training accuracy 0.0772727
step 1000, training accuracy 0.995454
step 2000, training accuracy 0.997727
step 3000, training accuracy 0.995454
step 4000, training accuracy 0.986364
step 5000, training accuracy 0.995454
step 6000, training accuracy 0.995454
step 7000, training accuracy 0.995454
step 8000, training accuracy 0.995454
step 9000, training accuracy 0.995454

汎化性能
test accuracy 0.757576

 

比較した結果

汎化性能に明らかな性能差がみられる。

またtraining accuracyについても若干の性能向上がみられており、無いよりはあった方が良い。

今回のケースに限り性能が良かったのではないかという話も無いわけではないので自分のモデルで使う場合はバッチ正規化を使用してみて性能を比較して検討してみてほしい。

 

Tensorflowでの書き方は比較対象の記事からgithubのコード置き場に行けるのでそこで読んでほしい。

もしくは

Tensorflowでbatch normlization(バッチ正規化)を使用する際の注意点(常に同じものしか出力しなくなったら) - akikanR’s blog

で紹介している記事にも書き方が載っている