回答編集履歴

2 初期化を追加

退会済みユーザー

退会済みユーザー

2018/01/10 07:25  投稿

**■訓練精度**
今の実相では、
`train_accuracy = sess.run(acc, feed_dict={`
となっているので、最後のバッチ一回で追加されずに上書きされてしまいそうです。
なので、まずは、
`train_accuracy += sess.run(acc, feed_dict={`
に修正してはいかがでしょうか
 
あとはこれをしようとすると、`train_accuracy`を初期化しないといけませんね。  
**■テスト精度**
上のやり方でうまくいくようなら、`train_accuracy `関係のコードをコピペして、trainという文字列をtestに置換して動かせばうまくいきそうです。
手元にデータはないので確認できませんが、以下のようなものを想定しています。
```Python
# 訓練の実行
for step in range(FLAGS.max_steps):
   # 訓練
   #############################################
   train_accuracy = 0  
   for i in range(int(len(train_image)/FLAGS.batch_size)):
       # batch_size分の画像に対して訓練の実行
       batch = FLAGS.batch_size*i
       # feed_dictでplaceholderに入れるデータを指定する
       sess.run(train_op, feed_dict={
         images_placeholder: train_image[batch:batch+FLAGS.batch_size],
         labels_placeholder: train_label[batch:batch+FLAGS.batch_size],
         keep_prob: 0.5})
       # 1 batch終わるたびにデータを追加する
       train_accuracy += sess.run(acc, feed_dict={
           images_placeholder: train_image,
           labels_placeholder: train_label,
           keep_prob: 1.0})
   # 1 step毎にデータを表示する
   print("step %d, training accuracy %g" %(step, train_accuracy))
   # TensorBoard
   #############################################
   # 1 step終わるたびにTensorBoardに表示する値を追加する
   summary_str = sess.run(summary_op, feed_dict={
       images_placeholder: train_image,
       labels_placeholder: train_label,
       keep_prob: 1.0})
   summary_writer.add_summary(summary_str, step)
   # テスト
   #############################################
   # テストデータに対する精度を表示 
   test_accuracy= 0  
   for i in range(int(len(test_image)/FLAGS.batch_size)):
       # batch_size分の画像に対して訓練の実行
       batch = FLAGS.batch_size*i
       # feed_dictでplaceholderに入れるデータを指定する
       sess.run(acc, feed_dict={
         images_placeholder: test_image[batch:batch+FLAGS.batch_size],
         labels_placeholder: test_label[batch:batch+FLAGS.batch_size],
         keep_prob: 0.5})
       
       # 1 batch終わるたびにデータを追加する
       test_accuracy += sess.run(acc, feed_dict={
           images_placeholder: test_image,
           labels_placeholder: test_label,
           keep_prob: 1.0})
   # 1 step毎にデータを表示する
   print("step %d, testing accuracy %g" %(step, test_accuracy))
```
1 コード中のコメント修正

退会済みユーザー

退会済みユーザー

2018/01/10 07:19  投稿

**■訓練精度**
今の実相では、
`train_accuracy = sess.run(acc, feed_dict={`
となっているので、最後のバッチ一回で追加されずに上書きされてしまいそうです。
なので、まずは、
`train_accuracy += sess.run(acc, feed_dict={`
に修正してはいかがでしょうか
**■テスト精度**
上のやり方でうまくいくようなら、`train_accuracy `関係のコードをコピペして、trainという文字列をtestに置換して動かせばうまくいきそうです。
手元にデータはないので確認できませんが、以下のようなものを想定しています。
```Python
# 訓練の実行
for step in range(FLAGS.max_steps):
   # 訓練
   #############################################
   for i in range(int(len(train_image)/FLAGS.batch_size)):
       # batch_size分の画像に対して訓練の実行
       batch = FLAGS.batch_size*i
       # feed_dictでplaceholderに入れるデータを指定する
       sess.run(train_op, feed_dict={
         images_placeholder: train_image[batch:batch+FLAGS.batch_size],
         labels_placeholder: train_label[batch:batch+FLAGS.batch_size],
         keep_prob: 0.5})
   # 1 step終わるたびに精度を計算する
       # 1 batch終わるたびにデータを追加する
       train_accuracy += sess.run(acc, feed_dict={
           images_placeholder: train_image,
           labels_placeholder: train_label,
           keep_prob: 1.0})
 
   # 1 step毎にデータを表示する  
   print("step %d, training accuracy %g" %(step, train_accuracy))
   # TensorBoard
   #############################################
 
   # 1 step終わるたびにTensorBoardに表示する値を追加する
   summary_str = sess.run(summary_op, feed_dict={
       images_placeholder: train_image,
       labels_placeholder: train_label,
       keep_prob: 1.0})
   summary_writer.add_summary(summary_str, step)
   # テスト
   #############################################
   # テストデータに対する精度を表示 
   for i in range(int(len(test_image)/FLAGS.batch_size)):
       # batch_size分の画像に対して訓練の実行
       batch = FLAGS.batch_size*i
       # feed_dictでplaceholderに入れるデータを指定する
       sess.run(acc, feed_dict={
         images_placeholder: test_image[batch:batch+FLAGS.batch_size],
         labels_placeholder: test_label[batch:batch+FLAGS.batch_size],
         keep_prob: 0.5})
   # 1 step終わるたびに精度を計算する
       
       # 1 batch終わるたびにデータを追加する
       test_accuracy += sess.run(acc, feed_dict={
           images_placeholder: test_image,
           labels_placeholder: test_label,
           keep_prob: 1.0})
 
   # 1 step毎にデータを表示する  
   print("step %d, testing accuracy %g" %(step, test_accuracy))
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る