CNN などにおける Accuracy (識別率)を出力する際、
ある海外サイトでは
Python
1test_acc = 0. 2test_count = 0 3for _ in range(val_batches_per_epoch): # テスト開始 4 img_batch, label_batch = sess.run(next_batch) # 次のバッチ取得 5 acc = sess.run(accuracy, feed_dict={x: img_batch, # acc はバッチに対するテスト精度 6 y: label_batch, 7 keep_prob: 1.}) 8 test_acc += acc 9 test_count += 1 10test_acc /= test_count # テスト精度の平均を計算 11print("Validation Accuracy = {:.4f}", test_acc))
なのですが、日本のサイトのプログラムでは
Python
1 2test_accuracy = 0.0 3for i in range(test_batch): # テスト開始 4 batch = FLAGS.batch_size*i 5 batch_plus = FLAGS.batch_size*(i+1) # 次のバッチ取得 6 test_accuracy += sess.run(acc, feed_dict={ 7 images_placeholder: test_image[batch:batch_plus], 8 labels_placeholder: test_label[batch:batch_plus], 9 keep_prob: 1.0}) 10 if i is not 0: test_accuracy /= 2.0 # 前までの平均に現在の識別率を足して 2 で割っている(???) 11print "test accuracy %g"%(test_accuracy)
となっています。変数や記述の違いはありますが、要するに、
海外では「バッチに対する精度を計算 → バッチ数分それぞれで計算して合計 → バッチ数で割って平均」としていて、
日本では「バッチに対する精度を計算 → 前の精度に現在の精度に足して 2 で割る → バッチ数文繰り返す」となっています。
個人的に日本で蔓延しているプログラムは何をしたいのか良くわかりません・・・
平均を表そうとしているのかもしれませんが、これでは平均になっていませんし、Training Accuracy もそういう計算方法になっています。
これは日本のサイトが間違っているんでしょうか?
あと、Training Accuracy(和訳わかりません) というのは、現バッチに対する訓練精度をそのまま出力するものなんでしょうか?(バッチサイズ 10 なら 0.6、0.8、0.7、0.9、1.0、1.0、1.0 ... のようになる)
それとも、現在までのエポックの精度を足し合わせて現エポック数で割ったものが Training Accuracy になるのでしょうか?
回答よろしくお願いします m(_ _)m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。