人間の感覚だと・・これで精度があがるってのがピンときませんね。CNNに組み込んで効果を試すベースになるシンプルなCNNを組んでみます。ベースになるCNNは過去記事を参考にベースにするのは、例によって「使い方5」「使い方6」で説明しているものです。arakan-pgm-ai.hatenablog.comarakan-pgm-ai.hatenablog.comこれに、「BatchNormalization」を組み込んでいくわけです。BatchNormalizationは、ConvolutionやAffineの後に挿入するのが普通です。置き場所をいろいろ変えて試してみます。BatchNormalizationを、inputの直後においてみる試しにinputの直後におきます。こんなん見たことないですけど・・おもしろいので。こんな感じでinputの直後に置くと、この出力が「convolution」の入力になるわけですよね・・・大丈夫かな。この構成で、データはMNISTではなくて、前につかったオリジナルのアルファベットの独自データをDATASETにしてやってみます。arakan-pgm-ai.hatenablog.com別にMNISTのままでも全然いいです。以下の結果とはちょっと変わるかもしれませんので、ご容赦ください。上記の構成で学習してみた結果がこちらです。最後の方で、なんかおかしな動きしてますが、まあまあ、学習はできてるぽいです。評価結果はこんな感じ。99,20%・・ということは、変更する前の結果と同じということです。悪さもしないが、良くもならない。意味がないみたいですね。BatchNormalizationを、convolutionの直後に動かしてみるじゃあ、今度は、正規の位置・・つまり、convolutionの直後に動かしてみます。他の設定はまったく変えずに、学習と評価をやって、どう変わるか見てみます。学習した結果はこちら。きれいな学習曲線になりました。もって、評価した結果がこちら。おお!・・99.31%になった。リファレンスのConvolutionやAffineの後に挿入することで精度向上、および収束を早める効果があります。本当なんだなあ・・と実感できますね。調子にのって、DropOutを追加して、さらなる向上を狙ってみる。なると、「DropOut」を組み合わせるとどうなるか?興味がでてきます。ここで、inputの直後にDropOutを挿入してやってみましょう。設定はデフォルトのままでさわらないことにします。さきほどの、99.31%の構成にDropOutが加わっただけですね。これで、学習と評価をやってみます。