TensorFlow

【TensorFlow】超簡単!!TensorFlow/Kerasによるニューラルネットワークの実装

どうも、とがみんです。

以前の記事で、TensorFlowを利用して、ニューラルネットワークを構築し、手書き画像データの分類を行いました。


この記事では、機械学習をより簡単に扱うためのライブラリである、「Keras」を利用して、手書き数字画像データの分類を行うニューラルネットワークを実装していきます。

Kerasとは?

「Keras」は、TensorFlowや、他にもCNTK、Theano上で実行可能なニューラルネットワークのライブラリです。

容易に素早くプロトタイプの作成が可能であり、畳み込みニューラルネットワーク再帰ニューラルネットワーク,

またそれら2つの組み合わせもサポートされており、簡単に実装することができます。

この「Keras」を利用して、ニューラルネットワークを構築し、手書き数字の画像データを学習させ、その分類を行っていきます。

>Keras: Pythonの深層学習ライブラリ

今回実装するものの概要

今回は、以下のような単純なニューラルネットワークを「Keras」を利用し実装します。

構成は前回、TensorFlowのみを使用して作成したニューラルネットワークと同じものです。

>【TensorFlow】TensorFlowによる手書き文字を分類するニューラルネットワークの実装。

実装後、手書き数字の画像データを学習させ、その認識精度を確認していきます。

実装する前に、まず手書き数字の画像データを準備します。

手書き数字画像データの準備

手書き数字の画像データを準備します。

以下のコードを実行すると、x_trainy_trainx_testy_testに、トレーニング用とテスト用の画像データとその画像が表す数値のラベルデータを取得することができます。

それぞれのデータの形状を確認すると以下のような感じになってます。

画像データは縦×横=28ピクセル×28ピクセルで、学習用画像60000個、テスト用10000個あります。

手書き数字画像データ分類ニューラルネットワークの実装

「Kears」を用いて、ニューラルネットワークを構築し、手書き数字の画像データを学習させていきます。主に以下の3ステップあります。

  1. モデルの構築
  2. モデルのコンパイル
  3. モデルの学習

モデルの構築

以下のようにモデルを定義します。使いたい層を順次追加していきます。

上記のコードは、

1層目(入力層):入力データの平滑化。

2層目:活性化関数にReLU関数を使用した、ノード数が150の中間層。

3層目(出力層):活性化関数にソフトマックス関数を使用した、出力ノード数が10の出力層。

となっています。

>Keras Documentation

モデルのコンパイル

モデルをコンパイルします。

optimizerには、学習のアルゴリズムを指定し、lossには損失関数を指定し、metricsには、モデルの性能を測るための関数を指定します。

>評価関数の利用方法|Keras Documentation

モデルの学習

次に、モデルの学習をさせていきます。各エポックに対して、テストデータでその認識精度も確認させます。

画像のピクセルデータは、0〜255なので、255で割って、0〜1の値にしています。

学習済みモデルの保存と読み込み

以下のコードで学習したモデルの保存と読み込みを行うことができます。

学習結果

学習結果についてです。

認識精度と損失関数の値の推移

認識精度と損失関数の値の推移についてです。

以下コードを実行すると、グラフが表示されます。

テストデータに対する認識精度は「97.81%」という結果が得られました。

間違えた数字の一覧

以下に間違えた数字の一部を載せておきます。

まとめ

ニューラルネットワーク用ライブラリ「Keras」を利用して、手書き数字の画像データを分類する、単純なニューラルネットワークを構築しました。

「Keras」を利用すれば、このようにニューラルネットワークを簡単に構築できてしまいます。

参考文献

>Get Started with TensorFlow|TensorFlow

>Keras: Pythonの深層学習ライブラリ