2017-04-07 3 views
2

일괄 처리 당 tensorflow로 요약 통계 집합을 수집 중입니다.tensorflow에서 요약 통계를 축적하는 방법

테스트 세트를 통해 계산 된 동일한 요약 통계를 수집하려고하지만 테스트 세트가 너무 커서 한 배치에서 처리 할 수 ​​없습니다.

테스트 세트를 반복하면서 동일한 요약 통계를 계산할 수있는 편리한 방법이 있습니까?

+0

중복이 가능합니까? https://stackoverflow.com/questions/40788785/how-to-average-summaries-over-multiple-batches/ – Maikefer

+0

여기에는 중복 질문이 있지만 허용되는 대답에는 스트리밍 평균 패키지가 언급되어 있지 않습니다. 'tf.metrics'로 옮겨 졌을 때, 그 질문에 더 새로운 대답이 있습니다. –

답변

3

최근에 추가 된 것 같습니다. 필자는 contrib에서 메트릭 평가를 스트리밍하는 것으로 나타났습니다.

https://www.tensorflow.org/versions/master/api_guides/python/contrib.metrics

+1

그리고 원래 게시물 몇 개월 후 contrib 일부에서 이동 : https://www.tensorflow.org/api_docs/python/tf/metrics/mean (이 페이지에 끝나는 사람들을위한 참조) –

1

또 다른 가능성은 tensorflow 외부의 시험 배치를 통해 요약을 축적하고 다음 축적의 결과를 할당 할 수있는 그래프의 더미 변수를하는 것입니다. 예를 들어, 여러 배치에 걸쳐 유효성 검증 세트의 손실을 계산하고 평균의 요약을 원한다고 가정 해보십시오. 다음과 같은 방법으로이를 달성 할 수있는 그런 다음

with tf.name_scope('valid_loss'): 
    v_loss = tf.Variable(tf.constant(0.0), trainable=False) 
    self.v_loss_pl = tf.placeholder(tf.float32, shape=[], name='v_loss_pl') 
    self.update_v_loss = tf.assign(v_loss, self.v_loss_pl, name='update_v_loss') 

with tf.name_scope('valid_summaries'): 
    v_loss_s = tf.summary.scalar('validation_loss', v_loss) 
    self.valid_summaries = tf.summary.merge([v_loss_s], name='valid_summaries') 

를 평가 시간 :

total_loss = 0.0 
for batch in all_batches: 
    loss, _ = sess.run([get_loss, ...], feed_dict={...}) 
    total_loss += loss 
total_loss /= float(n_batches) 

[_, v_summary_str] = sess.run([self.update_v_loss, self.valid_summaries], 
           feed_dict={self.v_loss_pl: total_loss}) 
writer.add_summary(v_summary_str) 

을이 일을 얻을 수 있지만, 그것은 틀림없이 조금 해키 느낀다. 게시자가 게시 한 스트리밍 메트릭 평가는 훨씬 더 우아 할 수 있습니다. 실제로 실제로 건너온 적이 없으므로 확인해보십시오.

관련 문제