tensorflow string_input_producer 给出空队列

tensorflow string_input_producer gives empty queue

我正在尝试根据文件名列表在 tensorflow 中创建一个队列。列表已生成,但字符串输入生成器似乎返回了一个空队列。代码不起作用可能还有其他原因。下面是代码:

sess = tf.InteractiveSession()

def read_my_file_format(filename_queue):
    reader = tf.WholeFileReader()
    key, value = reader.read(filename_queue)
    images = tf.image.decode_jpeg(value, channels=3)
    return images, key

def input_pipeline(filenames, batch_size, num_epochs, labels):
    filename_queue = tf.train.string_input_producer(filenames, num_epochs=num_epochs, shuffle=False)
    image, key = read_my_file_format(filename_queue)
    return image, key

sess.run(tf.global_variables_initializer())

coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess = sess, coord = coord, start=True)

input_pipeline(trainnames, batch_size, None, labels)

coord.request_stop()
coord.join(threads)

如果您能提供错误消息,将会有所帮助。

同时,对您的代码做几点说明:

  • 方法 input_pipeline 定义了与您的队列关联的 TensorFlow 运算符并将它们添加到图表中,因此如果您希望队列成为图表的一部分,您应该在调用 sess.run(tf.global_variables_initializer()) 之前调用它,并且如果您希望协调器启动您的队列,请在调用 start_queue_runners 之前。
  • 您还没有要求 TensorFlow 实际上 运行 您的 image, key 运算符。

这是我要尝试的代码:

sess = tf.InteractiveSession()

def read_my_file_format(filename_queue):
    reader = tf.WholeFileReader()
    key, value = reader.read(filename_queue)
    images = tf.image.decode_jpeg(value, channels=3)
    return images, key

def input_pipeline(filenames, batch_size, num_epochs, labels):
    filename_queue = tf.train.string_input_producer(filenames, num_epochs=num_epochs, shuffle=False)
    image, key = read_my_file_format(filename_queue)
    return image, key

# Let us define the queue operators and add them to the default graph.
image, key = input_pipeline(trainnames, batch_size, None, labels)

sess.run(tf.global_variables_initializer())

coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(sess = sess, coord = coord, start=True)

# Let's run the image, key tensors.
sess.run([image, key])

coord.request_stop()
coord.join(threads)