私は、テンソルフローを持つ畳み込みニューラルネットワークの最初のテストを行っています。私は、プログラミングガイドのキューランナーとの推奨方法を適用しました(下記のセッション定義を参照)。出力はcnnからの最後の結果です(ここでは最後のステップのみです)。 label_batch_vectorはトレーニングラベルのバッチです。トレーニングセット全体の精度を計算する
output = tf.matmul(h_pool2_flat, W_fc1) + b_fc1
label_batch_vector = tf.one_hot(label_batch, 33)
correct_prediction = tf.equal(tf.argmax(output, 1), tf.argmax(label_batch_vector, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
print_accuracy = tf.Print(accuracy, [accuracy])
# Create a session for running operations in the Graph.
sess = tf.Session()
# Initialize the variables (like the epoch counter).
sess.run(init_op)
# Start input enqueue threads.
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
try:
while not coord.should_stop():
# Run training steps or whatever
sess.run(train_step)
sess.run(print_accuracy)
except tf.errors.OutOfRangeError:
print('Done training -- epoch limit reached')
finally:
# When done, ask the threads to stop.
coord.request_stop()
# Wait for threads to finish.
coord.join(threads)
sess.close()
私の問題は、精度が各バッチで計算され、各エポックごとに計算されることです。私は次のことを行う必要があります:epoch_accuracyテンソルを初期化する。epochで計算されたバッチ精度のそれぞれをepoch_accuracyに追加する。エポックショーの最後に、計算されたトレーニングセットの精度が示されます。しかし、私が実装したこのキュースレッド(実際にはTensorFlowから推奨されるメソッド)を使って、このような例は見つけられません。誰も助けることができますか?
まだテストしていませんが、私はすべてのエポックの単一の値を計算する気がします。私は各時代の価値が必要です。 – Cristi
私は今、テストして、入力を生成する方法を与えました。エポックごとに計算するのはそれほど簡単ではありません。 – Cristi
私は質問があります:ネットワークモデルの重みは、各バッチ後にsess.run(train_step)に続いて継続的に更新されています。次に、精度として計算されるのは、データセット全体の最新の重みによる精度ではなく、現時点までの重みの変更による計算精度の平均としての精度ですか?私は正しく理解しましたか? – Cristi