質問: sess.run(...)`は学習したモデルの損失と正解率を算出しているだけで,パラメータ調整には影響していないのかなと. 上記の場合,汎化能力や過学習への対応ができないため,「バリデーションを行うべき」と多く目にします. しかし,`valid_data`をどのように入力すれば`valid_data`によるパラメータ調整ができるのかがわかりません. 不勉強で申し訳ないですが,どうかお願いします.
回答: train_dataのみで学習と精度の上昇具合を繰り返している状態ですと、 train_data内でのデータに関してはもしかしたら100%の精度を保てるかもしれませんが、 実際にはtrain_data以外のデータでも学習されたモデルで精度が確保される状態にする必要があります。 ここで質問者様がおっしゃられている「バリデーションを行うべき」とは 「学習に使用したデータ以外でaccuracyを見てみるべき」という意味かと認識しました。 そちらに関してはすでに下記のコードでtrain_dataとは別のデータを使い精度を出していることである意味実現できていますし # コストと精度を出力 train_loss, train_acc = sess.run([loss, accuracy], feed_dict={ph_data:test_data, ph_labels:test_labels}) また、valid_dataというデータをすでに用意されているようですので 学習完了後に上記test_dataと同じようにlossとaccuracyにvalid_dataをfeedとして与え、 valid_dataを使用した時のlossとaccuracyを見ることで、学習時とは異なるデータでの精度をみます。(コード的にもtest_dataと同様なので割愛します) > > valid_dataによるパラメータ調整ができる > > > コメント欄にもありますがvalid_dataは「train_data以外でも適切な精度が出ているか」を検証するためのものなので パラメータ調整を自動で行ってくれるものではありません。 現在の所モデルの形やいわゆるハイパーパラメータを自動で行う仕組みはありません。 ただ、たとえばGoogleCloudMLにはハイパーパラメータのチューニングを行ってくれる機能があります。 しかしこれも「DeepLearningの仕組みとしてなんとか」しているのではなく、バッチ処理的に色々なハイパーパラメータで試している(物だと思っています。) ※過学習に対応したいのであればドロップアウトの層を入れる等のモデル変更を行い、 ドロップアウト率を上記ハイパーパラメータのチューニングで対処する形になるかと思います。