keras による fashion MNIST の3層ニューラルネットワークとCNN(畳み込みニューラルネットワーク)解析

Pocket

はじめに

本記事は Udemy の 【4日で体験しよう!】 TensorFlow, Keras, Python 3 で学ぶディープラーニング体験講座 の内容を参考に同様の内容をAmazon SageMakerで実行する記事となります。
〇環境準備 : SageMaker での環境構築と keras による MNIST の3層ニューラルネットワーク解析
〇分析実行 : keras による fashion MNIST の3層ニューラルネットワークとCNN(畳み込みニューラルネットワーク)解析 ←(本稿)

fashion MNIST

衣料品画像60,000枚と、テスト画像10,000枚を集めた、画像データセットです。
衣料品ラベルは整数の配列で、0から9です。これらは画像が表わす衣料品のクラスに対応します。

3層のニューラルネットワーク解析

新しくノートブックを作成して、コードを書きます。
その1の手順と同じように new から conda_tensorflow_p36 を選択して、名前を付けましょう。
私はfusion_MNIST_3layersと名前を付けました。
処理内容は MNIST とほとんど変わらないので、簡単に記述します。

モジュールのインポートと設定

fashion MNISTデータのダウンロード

データの確認
・fashion MNISTの画像も28×28の二次元配列になっています。
・各要素は0~255の値を取っていて、色が黒に近いほうが数が大きくなります。

実行結果

・x_train に60000個の画像データがあることを確認します。

実行結果

・試しに画像を10個表示します。

実行結果

データの加工
・0~255の数を訓練向けに0~1の値に変換するために、各要素を255で割ります。

ニューラルネットワークの層を定義

ニューラルネットワークの訓練課程の設定

モデルの作成
・train データを使用して、モデルの作成を行います。

実行経過

精度の確認
・test データを使用して、モデルの精度を確認します。

実行結果

・MNIST では98.1%という精度でしたが、fashion MNIST では88.3%に留まりました。
・精度を上げるために、CNN(畳み込みニューラルネットワーク) という手法を試してみます。

CNN(畳み込みニューラルネットワーク)

新しくノートブックを作成して、コードを書きます。
その1の手順と同じように new から conda_tensorflow_p36 を選択して、名前を付けましょう。
私はfusion_MNIST_CNNと名前を付けました。

モジュールのインポートと設定

データのダウンロード

データの変換
・変換のためにデータのカラーチャネルの位置を取得します。

実行結果

・カラーチャネルの情報は最後にあることがわかったので、それに合わせてデータを変換します。

・データを0~255の値から、学習用に0~1の値に変換する。

CNN の層を定義
・33のフィルタを32種使用して、28281の入力データを262632にします。活性化関数には relu を使用します。
・3
3のフィルタを64種使用して、262632の入力データを242464にします。活性化関数には relu を使用します。
・242464の入力データを121264にします。
・入力を25%Dropout(無視)します。
・2次元の入力データを1次元にします。
・128個のノードに全結合します。活性化関数には relu を使用します。
・入力を50%Dropout(無視)します。
・10個のノードに全結合します。活性化関数には softmax を使用します。

CNN の訓練課程の設定
・最適化手法は Adam を使用。
・損失関数は sparse_categorical_crossentropy を使用。
・metrics に accuracy を設定することで、評価を記録するようにします。

モデルの作成
・train データを使用して、モデルの作成を行います。
・epoch は訓練データを繰り返し学習する回数を指定します。
・バッチサイズは未設定で32となります。

備考
・メモリが32GB以上のインスタンスサイズに変更しないと処理が完了しません。
・インスタンスタイプを今まで使用していたml.t2.mediumからml.t2.2xlargeにアップデートすることで処理を完了できます。
・またml.t2.2xlargeからGPUインスタンスのml.p2.xlargeを使用することで処理速度が向上します。
・ml.t2.meidum を利用した場合は以下のエラーが表示されます。

モデル作成の実行結果

精度の確認
・test データを使用して、モデルの精度を確認します。

実行結果
・今回、精度は92.5%ほどでした。
・先ほどの3層ニューラルネットワークでは、精度が88.3%ほどだったので、うまく精度を上げることができました。

おわりに

今回は、kerasを使って、fashion MNIST データを2つの手法で解析しました。
この記事はここまでとさせていただきます。
今後も、引き続き学習ログなど上げていきますので、よろしくお願いいたします。