Fresopiya
場所にもお金にも時間にも、何にも縛られない自由な状態になったら一体人間は何をしてどこに向かうのか。 まずはとにかく自由を目指すエンジニアのブログです。

哲学とプログラミングとブログがメインになるかと。
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の深層学習ライブラリ