PythonとKerasによるディープラーニング 第5章①
第5章では実際に畳み込みニューラルネットワーク(CNN)を使っていく章です。
最初はMNISTを用いてCNNを試していきます。
CNNを用いることで今まで画像を平坦なベクトルにしてから処理していたのを丸々画像として読み込めるようになります。
CNNで特徴的なのはConv2D層とMaxPooling2D層を用いる点です。
これまでのDense層では1次元のベクトルを用いてたのに対し、この二つは(height, width, channels)の3次元テンソルを用います。
これにより空間的な連続性を認識できるようになります。
Conv2D層では、Conv2D(output_depth, (window_height, window_width))となっています。例えばConv2D(32, (3, 3))であれば、3×3のウインドウを画像全体をスライドさせ、(32, )の1次元ベクトルで出力するということです。この際にパディングやストライドを行うこともできます。
MaxPooling2D層では、2×2のウインドウの中の最大値のみをピックアップすることでサンプルを小さくします。
そして最後にFlattenを用いてベクトルに変換し、Dense層に出力します。
このあたりの層についての説明は割と省いてあるので、ゼロから作るDeepLearningの方がわかりやすいかなと思いました。