2018年8月24日金曜日

ディープラーニングを体感しよう:第7章(プログラムコードを見ていこう3)


こんにちは。よっしーです。

これまでの記事:
ディープラーニングを体感しよう:第1章(まずは環境構築)
ディープラーニングを体感しよう:第2章(Python環境を構築する)
ディープラーニングを体感しよう:第3章(プログラムを動かしてみよう)
前回は前々回に引き続き、プログラムコードの内容を見ていきました。

ニューラルネットワークを作成し、3層を構成、ノード間で情報を伝達し、
答えを導き出すための準備をしました。

残りももう少しなので、引き続き内容を見ていきます。


sgd = optimizers.SGD(lr=0.1)
model.compile(optimizer=sgd, loss="categorical_crossentropy", metrics=["accuracy"])

history = model.fit(X_train, y_train, batch_size=500, epochs=5, verbose=1, validation_data=(X_test, y_test))


1行目の処理で、学習に必要な最適化パラメータを作成しています。
SGDというのはアルゴリズムの種類で「確率的勾配降下」というものです。

他にもいろいろとアルゴリズムの種類があるようで、
この種類を変えることで、学習速度や学習精度が変わってきます。

これも、前回少し解説した、活性化関数のようなもので、
アルゴリズムを追っていくと、難解な数式が出てきます。
なので、今回も内容については深追いはしません。

2行目の処理で、これまで設定してきた内容の学習処理を構築しています。
これでニューラルネットワークの作成が完了です。

そして4行目の処理で、作成したニューラルネットワークへ、
学習用データ、テスト用データを渡し、学習とテストを行っています。

batch_sizeというパラメータで、一度に渡すデータの数を指定しています。
この単位で、正解、不正解の「重み」をつけています。

また、epochs(エポック)というパラメータで、反復学習させる回数を指定しています。
ここでは6000データを5セット学習することとなります。

plt.plot(history.history["acc"], label="acc", ls="-", marker="o")
plt.plot(history.history["val_acc"], label="val_acc", ls="-", marker="x")
plt.ylabel("accuracy")
plt.xlabel("epoch")
plt.legend(loc="best")
plt.show()

そして、これらの処理でテストした結果をグラフ化し、画面へ表示しています。


横軸がエポックになっており、右へ進むほど反復学習を繰り返していることを表しています。
縦軸は正解率になっており、反復学習を繰り返すことで、正解率が上がっていく。
ということがグラフから読み取れます。

折れ線グラフが2本ありますが、
「val_acc」 が学習用データに対する正解率。
「acc」 がテスト用データに対する正解率になります。

テスト用データは、学習用データに含まれていないものなので、
正解率はテスト用データよりも落ちていますが、
学習を繰り返すことで、正解率が上昇していることが分かると思います。

ちなみに、このプログラムの実行結果ですが、実行する度、違う結果が表示されます。
(グラフは同じようなものになりますが、若干数値に差が出ます)

ニューラルネットワークを作成する際に設定したパラメータ(このことをハイパーパラメータという)によって、
ランダム性も取り入れられ、機械的ではなく、本当に人間思考のような形で、答えを得ることが出来ています。

なかなか面白いですね。

今日はこのあたりで。ではまた~。

0 件のコメント:

コメントを投稿