2016-10-20 5 views
16

TensorFlow 모델이 있으며이 모델의 한 부분이 정확도를 평가합니다. accuracy은 tensorflow 그래프의 다른 노드로, logitslabels을 사용합니다. 나는 훈련 정확도를 플롯 할 때동일한 그래프를 사용하여 TensorFlow에서 교육 및 유효성 검사 정확도 표시

, 이것은 간단하다 : 나는 같은 것을 가지고 내부 또한

for n in xrange(1000): 
    ... 
    summary, ..., ... = sess.run([summary_op, ..., ...], feed_dict) 
    writer.add_summary(summary, n) 
    ... 

: 내 훈련 루프 동안, 그리고

tf.scalar_summary("Training Accuracy", accuracy) 
tf.scalar_summary("SomethingElse", foo) 
summary_op = tf.merge_all_summaries() 
writer = tf.train.SummaryWriter('/me/mydir/', graph=sess.graph) 

를, 내가 좋아하는 뭔가를 that for loop, every say, 100 iterations, 유효성 확인의 정확성을 평가하고 싶습니다. 나는 이것을 위해 별도의 feed_dict가 있으며 파이썬에서 유효성 검사의 정확성을 매우 잘 평가할 수 있습니다.

그러나 여기에 내 문제가 있습니다. accuracy 노드를 사용하여 유효성 검사 정확도에 대한 요약을 다른 으로 만들고 싶습니다. 나는 이것을하는 방법에 관해 명확하지 않다. 내가 accuracy 노드를 가지고 있기 때문에 그것을 재사용 할 수 있어야한다는 것은 의미가 있지만 정확히 어떻게 해야할지 확신 할 수 없기 때문에 별도의 scalar_summary로 작성된 유효성 검사 정확도를 얻을 수 있습니다.

어떻게 가능합니까?

+0

일부 다른 솔루션에 대해서는 비슷한 질문이 있습니다. [여기] (http://stackoverflow.com/questions/37146614/tensorboard-plot-training-and-validation-losses-on-the-same-graph). – golmschenk

+0

귀하의 질문에 답변 할 수 있습니다 (두 개의 요약 dir을 설정하지 않음). http://stackoverflow.com/questions/34471563/logging-training-and-validation-loss-in-tensorboard –

답변

22

정확도 노드는 재사용 할 수 있지만 교육 실행과 테스트 데이터 용으로 두 가지 다른 SummaryWriter를 사용해야합니다. 또한 정확성을 위해 스칼라 요약을 변수에 지정해야합니다.

accuracy_summary = tf.scalar_summary("Training Accuracy", accuracy) 
tf.scalar_summary("SomethingElse", foo) 
summary_op = tf.merge_all_summaries() 
summaries_dir = '/me/mydir/' 
train_writer = tf.train.SummaryWriter(summaries_dir + '/train', sess.graph) 
test_writer = tf.train.SummaryWriter(summaries_dir + '/test') 

그런 다음 교육 과정에서 정규 교육을 받고 train_writer로 요약을 기록하십시오. 또한 매 100 번째 반복 테스트 세트에서 그래프를 실행하고 test_writer로 정확도 요약 만 기록합니다.

# Record train set summaries, and train 
summary, _ = sess.run([summary_op, train_step], feed_dict=...) 
train_writer.add_summary(summary, n) 
if n % 100 == 0: # Record summaries and test-set accuracy 
    summary, acc = sess.run([accuracy_summary, accuracy], feed_dict=...) 
    test_writer.add_summary(summary, n) 
    print('Accuracy at step %s: %s' % (n, acc)) 

당신은 상위 디렉토리 (summaries_dir)에 TensorBoard 가리킬 수 있으며 모두 데이터 세트를로드합니다.

도에서 찾을 수 있습니다 TensorFlow 하우투의 https://www.tensorflow.org/versions/r0.11/how_tos/summaries_and_tensorboard/index.html

+0

감사합니다. 다시보고 할 것입니다. – Spacey

+0

좋습니다. 그래서 이것이 문제라고 생각합니다. "summary_op"에는 병합 된 요약이 포함되어 있습니다. 그러나 나는 단지 validation_error에 대한 "summary"를 원한다. n % 100 루프 내에서 "summary_op"을 다시 전달하고 "summary"를 얻는 것처럼 모든 요약을 "실행"하는 것처럼 보입니다. (병합 된 모든 것들).하지만 정확성 노드가 실행되기를 원합니다 ... – Spacey

+0

또한 test_writer에 "sess.graph"가없는 이유는 무엇입니까? – Spacey

4

같은 작업을 실행하지만, 단순히 영업 이익이 개 요약 작전을 첨부, 다른 feed_dict 데이터와 요약을 얻을 수 있습니다.

validation_acc_summary = tf.summary.scalar('validation_accuracy', accuracy) # intended to run on validation set 
test_acc_summary = tf.summary.scalar('test_accuracy', accuracy) # intended to run on test set 
with tf.Session() as sess: 
    # do your thing 
    # ... 
    # accuracy op just needs labels y_ and input x to compute logits 
    validation_summary_str = sess.run(validation_acc_summary, feed_dict=feed_dict={x: mnist.validation.images,y_: mnist.validation.labels}) 
    test_summary_str = sess.run(test_acc_summary, feed_dict={x: mnist.test.images,y_: mnist.test.labels}) 

    # assuming you have a tf.summary.FileWriter setup 
    file_writer.add_summary(validation_summary_str) 
    file_writer.add_summary(test_summary_str) 

을 또한 당신은 항상 this처럼 protobuff의 summary_str에서 데이터를 원시 (스칼라)를 당겨 자신의 작업을 수행 할 수 있습니다 기억 : 당신이 모두 검증 및 테스트 데이터의 정확성 연산을 실행하고 모두 요약을 얻고 싶은 싶은 말 벌채 반출.

관련 문제