【TensorFlow】TensorFlowによる手書き文字を分類するニューラルネットワークの実装。|Fresopiya究極の自由を目指すブログFresopiyaFresopiya場所にもお金にも時間にも、何にも縛られない自由な状態になったら一体人間は何をしてどこに向かうのか。自由を目指すエンジニアのブログです。「哲学」と「プログラミング」と「政治経済」、「ブログ」がメインになるかと。TensorFlow【TensorFlow】TensorFlowによる手書き文字を分類するニューラルネットワークの実装。05/26/2019スポンサードリンクどうも、とがみんです。以前の記事で、TensorFlowを利用してプログラムを書く流れについて紹介しました。この記事では、TensorFlowを利用して、ニューラルネットワークを構築し、手書き画像データを分類するシステムを作成していきます。今回は、以下のような単純なニューラルネットワークを「TensorFlow」を利用して構築します。手書き数字画像データの準備をしていきます。mnist.load_data()それぞれのデータの形状を確認すると以下のような感じになってます。画像データは縦×横=28ピクセル×28ピクセルで、学習用画像60000個、テスト用10000個あります。データの前処理として、以下2つの処理を行います。正解データを「1〜9」の数字ではなく、「one-hot表現」へ変換。hot表現に変換データの形状は以下のように変換されます。以下のステップで、ニューラルネットワークのプログラムを書いていきます。入力データ、正解データを入れるようのプレースホルダーの準備と、各パラメータの初期化を行います。0.01))プレースホルダー内の配列の型にNoneを指定しておくと、入力データのサイズが変わっても対応することができます。truncated_normalは、ランダムな値を用意してくれます。各レイヤーの処理を記述します。tf.nn.softmax(a2)誤差関数、パラメータを最適化させる際に利用する関数、学習させる関数を記述します。var_list=[w1,b1,w2,b2])学習させるパラメータをvar_listに指定します。認識精度を確認するための関数を記述します。tf.float32))correct_predictionには、出力結果と正解データが同じであれば、True、異なれば、Falseを返します。tf.castで、Bool型のデータを少数型に変換し、その平均をtf.reduce_meanで取ることによって、認識精度を計算しています。処理を実行するプログラムを書いていきます。値を保持しておくための配列を用意しておきます。以下のコードを実行させると学習が始まります。学習はバッチサイズを100とし、600回バッチ学習を行います。1エポック分の学習をさせています。#トレーニングデータからランダムにバッチサイズ分のデータを取得。#10バッチ毎に、認識精度と損失の平均値を配列にん格納。range(600):#トレーニングデータからランダムにバッチサイズ分のデータを取得。{x:x_batch,y:y_batch})#10バッチ毎に、認識精度と損失の平均値を配列にん格納。sess.run(b2)10バッチ毎の以下の値をそれぞれ出力してくれます。学習の結果を表示します。以下のコードで認識精度に関するグラフを表示します。right')plt.show()青は、学習用データに対する認識精度、オレンジはテストデータに対する認識精度についてです。テストデータに対する最終的な認識精度は「95.29%」になりました。以下のコードで、損失関数の値に関するグラフを表示します。right')plt.savefig('images/TensorNNloss')plt.show()青は、学習用データに対する損失関数の値、オレンジはテストデータに対する損失関数の値についてです。テストデータに対する最終的な損失値は「0.1531」になりました。まとめTensorFlowを利用して、ニューラルネットワークを実装し、手書き文字の画像データの分類を行いました。行われる学習方法について。性能向上を目的とした研究をしていました。現在はFinTech系ベンチャー企業勤務。