どうも、とがみんです。
以前の記事で、TensorFlowを利用して、ニューラルネットワークを構築し、手書き画像データの分類を行いました。
この記事では、機械学習をより簡単に扱うためのライブラリである、「Keras」を利用して、手書き数字画像データの分類を行うニューラルネットワークを実装していきます。
Contents [hide]
Kerasとは?
「Keras」は、TensorFlowや、他にもCNTK、Theano上で実行可能なニューラルネットワークのライブラリです。
容易に素早くプロトタイプの作成が可能であり、畳み込みニューラルネットワーク、再帰ニューラルネットワーク,
またそれら2つの組み合わせもサポートされており、簡単に実装することができます。
この「Keras」を利用して、ニューラルネットワークを構築し、手書き数字の画像データを学習させ、その分類を行っていきます。
今回実装するものの概要
今回は、以下のような単純なニューラルネットワークを「Keras」を利用し実装します。
構成は前回、TensorFlowのみを使用して作成したニューラルネットワークと同じものです。
>【TensorFlow】TensorFlowによる手書き文字を分類するニューラルネットワークの実装。
実装後、手書き数字の画像データを学習させ、その認識精度を確認していきます。
実装する前に、まず手書き数字の画像データを準備します。
手書き数字画像データの準備
手書き数字の画像データを準備します。
以下のコードを実行すると、x_train、y_train、x_test、y_testに、トレーニング用とテスト用の画像データとその画像が表す数値のラベルデータを取得することができます。
それぞれのデータの形状を確認すると以下のような感じになってます。
画像データは縦×横=28ピクセル×28ピクセルで、学習用画像60000個、テスト用10000個あります。
手書き数字画像データ分類ニューラルネットワークの実装
「Kears」を用いて、ニューラルネットワークを構築し、手書き数字の画像データを学習させていきます。主に以下の3ステップあります。
- モデルの構築
- モデルのコンパイル
- モデルの学習
モデルの構築
以下のようにモデルを定義します。使いたい層を順次追加していきます。
上記のコードは、
1層目(入力層):入力データの平滑化。
2層目:活性化関数にReLU関数を使用した、ノード数が150の中間層。
3層目(出力層):活性化関数にソフトマックス関数を使用した、出力ノード数が10の出力層。
となっています。
モデルのコンパイル
モデルをコンパイルします。
optimizerには、学習のアルゴリズムを指定し、lossには損失関数を指定し、metricsには、モデルの性能を測るための関数を指定します。
>評価関数の利用方法|Keras Documentation
モデルの学習
次に、モデルの学習をさせていきます。各エポックに対して、テストデータでその認識精度も確認させます。
画像のピクセルデータは、0〜255なので、255で割って、0〜1の値にしています。
学習済みモデルの保存と読み込み
以下のコードで学習したモデルの保存と読み込みを行うことができます。
学習結果
学習結果についてです。
認識精度と損失関数の値の推移
認識精度と損失関数の値の推移についてです。
以下コードを実行すると、グラフが表示されます。
テストデータに対する認識精度は「97.81%」という結果が得られました。
間違えた数字の一覧
以下に間違えた数字の一部を載せておきます。
まとめ
ニューラルネットワーク用ライブラリ「Keras」を利用して、手書き数字の画像データを分類する、単純なニューラルネットワークを構築しました。
「Keras」を利用すれば、このようにニューラルネットワークを簡単に構築できてしまいます。
参考文献
>Get Started with TensorFlow|TensorFlow