我是tensorflow的新手,我肯定我做错了什么。我的问题是,当我从文件中读取记录时,代码有时会起作用,但大多数时候都会失败:
import tensorflow as tf
import numpy as np
import time
def readFrame(inQueue, reader):
frameWidth = int(1920/16)+1
frameHeight = int(1080/16)+1
frameItemsCount = frameWidth*frameHeight
_, serialized_frame = reader.read(inQueue)
features = tf.parse_single_example(
serialized_frame,
features= {
'x' : tf.FixedLenFeature([frameItemsCount], tf.float32)
, 'y' : tf.FixedLenFeature([frameItemsCount], tf.float32)
, 'direction': tf.FixedLenFeature([frameItemsCount], tf.float32)
# , 'force' : tf.FixedLenFeature([frameItemsCount], tf.float32)
# , 'sad' : tf.FixedLenFeature([frameItemsCount], tf.float32)
})
return features
# pretty much copy paste from fully_connected_reader.py
def main(_):
with tf.Graph().as_default():
inputFramesQueue = tf.train.string_input_producer(["tfrecords.out"], num_epochs=100)
reader = tf.TFRecordReader()
init_op = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init_op)
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess=sess, coord=coord)
try:
step = 0
while not coord.should_stop() and step < 3:
start_time = time.time()
frameDict = readFrame(inputFramesQueue, reader)
print(frameDict)
frame = sess.run([
frameDict['x']
, frameDict['y']
, frameDict['direction']
# , frameDict['force']
# , frameDict['sad']
])
print(frame[2])
duration = time.time() - start_time
if step % 100 == 0: print('Step %d: (%.3f sec)' % (step, duration))
step += 1
except tf.errors.OutOfRangeError:
print('Done training for %d epochs, %d steps.' % (FLAGS.num_epochs, step))
finally:
coord.request_stop()
coord.join(threads)
sess.close()
if __name__ == '__main__':
tf.app.run()
例如,当我运行它时,我得到了两个不同的输出:
^{pr2}$不知何故,当试图从那里获取项目时,文件似乎无法访问。。。在
我通过在启动线程之后和开始读取记录之前休眠一段时间来消除这个错误。在
如果我加了睡眠,在开始线程之前,它没有效果。。。我对正在发生的事情最好的猜测是可能有一些由队列线程填充的预读缓冲区,但是解析数据并不是等待缓冲区有足够的数据才开始读取它。。。在
我仍然相信我做错了什么。即使是在加上睡眠之后,我似乎读不到比被服务的数据更快的速度。在
相关问题 更多 >
编程相关推荐