2017-11-14 8 views
-1

내 데이터는 tfrecords 파일에 있습니다. 이 간단한 코드는 tf.data.Dataset API를 사용하여 이미지를 반복하고 일괄 처리합니다. 그러나 100 배치 당 계산 시간이 증가합니다. 이것이 왜 그렇게하고 어떻게 해결할 수 있습니까? tf.data.Dataset API를 사용하여 TFRecords를 읽는 것은 계산 시간을 늘립니다.

import tensorflow as tf 
import time 
sess = tf.Session() 
dataset = tf.data.TFRecordDataset('/tmp/data/train.tfrecords') 
dataset = dataset.repeat() 
dataset = dataset.batch(3) 
iterator = dataset.make_one_shot_iterator() 

prev_step = time.time() 
for step in range(10000): 
    tensors = iterator.get_next() 
    fetches = sess.run(tensors) 
    if step % 200 == 0: 
     print("Step %6i time since last %7.5f" % (step, time.time() - prev_step)) 
     prev_step = time.time() 

다음 번 출력 :

Step  0 time since last 0.01432 
Step 200 time since last 1.85303 
Step 400 time since last 2.15448 
Step 600 time since last 2.65473 
Step 800 time since last 3.15646 
Step 1000 time since last 3.72434 
Step 1200 time since last 4.34447 
Step 1400 time since last 5.11210 
Step 1600 time since last 5.87102 
Step 1800 time since last 6.61459 
Step 2000 time since last 7.57238 
Step 2200 time since last 8.33060 
Step 2400 time since last 9.37795  

tfrecords 파일은 문제의 범위를 좁힐 수 this HowTo from the Tensorflow doc's

작성 MNIST 이미지를 포함, 전에서 원시 이미지를 읽을 수있는 코드를 재현 디스크. 이 경우 200 배치 당 시간은 예상대로 일정하게 유지됩니다.

지금 내 질문은 :

  • 코드의 어떤 부분이 계산 시간을 증가?
  • Tensorflow github에 버그로 신고해야합니까?

해결! 내 자신의 질문에

답변 : 해결 루프

+0

루프 외부 get_next() 이동 그렇지? 다른 형식에서 동일한 데이터를 읽는 데 대해 동일한 측정을 수행 할 수 있습니까? –

+1

'get_next'는 op를 반환합니다. 루프 외부에 있어야 할 것 같네요? –

+0

@ E_net4 주석 주셔서 감사합니다. –

답변

1

외부 get_next()를 이동하십시오 TFRecord 데이터 세트의 구조가 무엇인지, 어떻게 큰 : 추가 정보를 포함하는 것이 유용 할 것이다