CNNのフィルター数と学習精度について
今回のテーマは、「CNNのフィルター数と学習精度について-1層の畳み込み層-」についてです。
CNNは、Kerasを使って、簡単に作っていきます。
学習対象は、お馴染みのMNISTの手書き数字です。
ソースコードとその結果を示していきます。
結果は、リスト表示と、グラフで示します。
それでは、実験スタート!!
/*追加として、フィルター数と精度、時間の関係について実験しました。*/
/*こちらが完結編で、今回の実験は終了します。*/
学習対象
MNISTの手書き数字が学習対象です。
訓練データが、600000
テストデータが、100000
CNNの構成
畳み込み層:1層
MAXプーリング層:1層
全結合層:1層
出力層
畳み込み層のチャンネル数と、その時の精度について調べていきます。
CNNについて以下のページでも紹介しています。
結果
今回調べたのは、フィルター数が1〜256まで時の精度です。
グラフは、縦軸に精度、横軸にフィルター数を割り当てています。
まず、始めに表示するのは、1〜10までの精度です。
次に表示するのは、指数関数的に増やしたもので、2〜256までです。
2のN乗のフィルター数を計算しています。
1〜10までの精度
精度のリスト
[0.9073, 0.9363, 0.951, 0.9644, 0.9607, 0.9616, 0.9718, 0.9706, 0.9765, 0.9771]
グラフから分かるように、フィルターを増やすにつれて、精度も上昇することが分かります。
しかし、よく見るとフィルター数が5の時と、8の時に下降していることも分かります。
2〜256の指数
精度のリスト
[0.9465, 0.9619, 0.9745, 0.977, 0.9816, 0.9834, 0.9832, 0.9855]
グラフから分かるように、フィルターを増やすにつれて、精度も上昇することが分かります。
驚くことに、今回設定したフィルター数の上限256で、精度が最も良い結果になりました。
処理時間は、1808秒つまり、30分掛かりました。
私の予想と結果の感想
私の予想は、フィルター数32か64で飽和すると予想していました。
特に根拠はありませんが…
フィルター数が多いほど計算量も増えるので、時間がかかります。
したがって、フィルター数を増やしすぎてしまうのは、実用的ではありません。
今回使用したCNNは、畳み込み層が1層なので、比較的軽い処理ですが、実用で使われるCNNでは、より複雑になります。
フィルター数と、計算処理時間との兼ね合いが重要になることでしょう。
今回の結果からは、このCNNでは、フィルターを増やせば、増やすほど精度が増加することが分かりました。
改善
今回は、最大256のフィルター数で実験しました。
次回は、256以上、完全に飽和するフィルター数も実験していきたいです。
また、フィルター数と計算時間など、比較対象を変えて実験したいと思います。
参考書
夢見るディープラーニング ニューラルネットワーク[Python実装]入門
追加実験
今回は、2〜1024までフィルター数を増やしたときの精度とその時の時間について実験しました。
考察等はしませんので、データだけでも何かしらの参考になればと思います。
フィルター数に対する、処理時間と精度の関係
表によるデータ
グラフによるデータ
最適なフィルター数は32
今回の結果から、最適なフィルター数は32と私は判断します。
今回得られたグラフから、精度には上限があるようと考えられます。
また、時間に関しては、上限がないと考えられます。
これにて、今回の実験は終わりにします。