【TensorFlow】超簡単!!TensorFlow/Kerasによるニューラルネットワークの実装|Fresopiya究極の自由を目指すブログFresopiyaFresopiya場所にもお金にも時間にも、何にも縛られない自由な状態になったら一体人間は何をしてどこに向かうのか。自由を目指すエンジニアのブログです。「哲学」と「プログラミング」と「政治経済」、「ブログ」がメインになるかと。05/29/2019スポンサードリンクどうも、とがみんです。以前の記事で、TensorFlowを利用して、ニューラルネットワークを構築し、手書き画像データの分類を行いました。この記事では、機械学習をより簡単に扱うためのライブラリである、「Keras」を利用して、手書き数字画像データの分類を行うニューラルネットワークを実装していきます。間違えた数字の一覧まとめ参考文献Kerasとは?「Keras」は、TensorFlowや、他にもCNTK、Theano上で実行可能なニューラルネットワークのライブラリです。容易に素早くプロトタイプの作成が可能であり、畳み込みニューラルネットワーク、再帰ニューラルネットワーク,またそれら2つの組み合わせもサポートされており、簡単に実装することができます。この「Keras」を利用して、ニューラルネットワークを構築し、手書き数字の画像データを学習させ、その分類を行っていきます。今回は、以下のような単純なニューラルネットワークを「Keras」を利用し実装します。構成は前回、TensorFlowのみを使用して作成したニューラルネットワークと同じものです。き数字の画像データを学習させ、その認識精度を確認していきます。実装する前に、まず手書き数字の画像データを準備します。手書き数字の画像データを準備します。以下のコードを実行すると、x_train、y_train、x_test、y_testに、トレーニング用とテスト用の画像データとその画像が表す数値のラベルデータを取得することができます。mnist.load_data()それぞれのデータの形状を確認すると以下のような感じになってます。画像データは縦×横=28ピクセル×28ピクセルで、学習用画像60000個、テスト用10000個あります。「Kears」を用いて、ニューラルネットワークを構築し、手書き数字の画像データを学習させていきます。以下の3ステップあります。以下のようにモデルを定義します。使いたい層を順次追加していきます。#28×28の行列を784要素の1次元行列に変換。Denseは全結合層(Affine)。Denseは全結合層(Affine)。keras.Sequential([#28×28の行列を784要素の1次元行列に変換。Denseは全結合層(Affine)。Denseは全結合層(Affine)。activation=tf.nn.softmax)])上記のコードは、1層目(入力層):入力データの平滑化。2層目:活性化関数にReLU関数を使用した、ノード数が150の中間層。3層目(出力層):活性化関数にソフトマックス関数を使用した、出力ノード数が10の出力層。Documentationモデルのコンパイルモデルをコンパイルします。metrics=['accuracy'])123model.compile(optimizer=tf.keras.optimizers.Adam(),loss='sparse_categorical_crossentropy',metrics=['accuracy'])optimizerには、学習のアルゴリズムを指定し、lossには損失関数を指定し、metricsには、モデルの性能を測るための関数を指定します。次に、モデルの学習をさせていきます。各エポックに対して、テストデータでその認識精度も確認させます。y_test))画像のピクセルデータは、0〜255なので、255で割って、0〜1の値にしています。学習済みモデルの保存と読み込み以下のコードで学習したモデルの保存と読み込みを行うことができます。認識精度と損失関数の値の推移についてです。以下コードを実行すると、グラフが表示されます。0.2)plt.show()テストデータに対する認識精度は「97.81%」という結果が得られました。以下に間違えた数字の一部を載せておきます。まとめニューラルネットワーク用ライブラリ「Keras」を利用して、手書き数字の画像データを分類する、単純なニューラルネットワークを構築しました。「Keras」を利用すれば、このようにニューラルネットワークを簡単に構築できてしまいます。性能向上を目的とした研究をしていました。現在はFinTech系ベンチャー企業勤務。