使用tensorflow读取TFRecords时出错:tensorflow.python.framework.错误.NotFoundError:FetchOutputs节点ParseSingleExample/squez

2024-10-03 06:24:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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}$

不知何故,当试图从那里获取项目时,文件似乎无法访问。。。在


Tags: importtimetfasstepframereadersess
1条回答
网友
1楼 · 发布于 2024-10-03 06:24:09

我通过在启动线程之后和开始读取记录之前休眠一段时间来消除这个错误。在

threads = tf.train.start_queue_runners(sess=sess, coord=coord)
time.sleep(1)

如果我加了睡眠,在开始线程之前,它没有效果。。。我对正在发生的事情最好的猜测是可能有一些由队列线程填充的预读缓冲区,但是解析数据并不是等待缓冲区有足够的数据才开始读取它。。。在

我仍然相信我做错了什么。即使是在加上睡眠之后,我似乎读不到比被服务的数据更快的速度。在

相关问题 更多 >