CNNのフィルター数と学習精度について-1層の畳み込み層-

こんにちは、βshortです。
今回のテーマは、「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と私は判断します。
今回得られたグラフから、精度には上限があるようと考えられます。
また、時間に関しては、上限がないと考えられます。

これにて、今回の実験は終わりにします。

おすすめ