質問: (X_test,y_test))となっている部分で、これが評価データに当たるのですが、毎エポックごとにこれはランダムに評価データをとってきているのでしょうか?そうだとしたら評価データの偏りは問題にならないし、モデルやパラメータの方に問題があるのかもしれませんが・・・ また、kerasの根本的な質問ですが、評価データに限らず、教室データの方も、バッチの数だけ毎回ランダムに使って学習しているのでしょうか?それともバッチ数100なら教師データ上から100、次はその次の100、という様にはなっていませんか? ________________________________ さらに追記です。 doropoutやbatchnormなどは使用して現在こんな感じです。![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/00aef2481f5cbae79263cd765cb36c44.png) 徐々に精度が下がってしまっています。。。
回答: #### 回答 これは一例(学習がうまくいっているパターン)ですが精度(accuracy)が一定のepoch毎に上がったり下がったりしますが全体の傾向として上昇傾向になるという例です。 ある一定区間(一定epoch数)だけをみると下がっているように見えるので「精度が下がったように見えた」という状況かもしれません。 !イメージ説明 !イメージ説明 Display Deep Learning Model Training History in Keras #### 対策 精度やロスが減少傾向になっているか確認するのはどうするのか、上記のように精度とロスをプロットすることです。便利なことにKerasは学習中の精度とロスを履歴記録してくれるので簡単にプロットすることができます。 ``` # 質問者様のコードを利用します # http://aidiary.hatenablog.com/entry/20161109/1478696865 より def plot_history(history): # print(history.history.keys()) # 精度の履歴をプロット plt.plot(history.history['acc']) plt.plot(history.history['val_acc']) plt.title('model accuracy') plt.xlabel('epoch') plt.ylabel('accuracy') plt.legend(['acc', 'val_acc'], loc='lower right') plt.show() # 損失の履歴をプロット plt.plot(history.history['loss']) plt.plot(history.history['val_loss']) plt.title('model loss') plt.xlabel('epoch') plt.ylabel('loss') plt.legend(['loss', 'val_loss'], loc='lower right') plt.show() # model.fitの戻り値で学習履歴(Historyオブジェクト)を受け取れます history = model.fit(X_train, y_train, batch_size=100, verbose=1, epochs = epoch, validation_data = (X_test,y_test)) # 学習履歴をプロット plot_history(history) ``` #### 参考 人工知能に関する断創録 - KerasでMNIST > > 学習履歴のプロット > > fit()の戻り値である history に学習経過の履歴が格納されている。このオブジェクトを使えばいろいろな経過情報をプロットできる。デフォルトでは、loss(訓練データセットの損失)だけだが、modelのmetricsにaccuracyを追加するとacc(精度)が、バリデーションデータセットを使うとval_loss(バリデーションデータセットの損失)やval_acc(バリデーションデータセットの精度)が自動的に追加される。さっきの図はこのデータを使ってmatplotlibで書いた。ユーザ独自のメトリクスも定義できるようだ。 > > > Keras - History #### おまけ ついでにKerasのCallbackあたりを調べておくとモデルの学習が捗ると思います。 特にEarlyStoppingやModelCheckpointなんかがよく使うかなと。 Keras - callbaks