1

我想从文件名列表中张量流量的队列。列表已经完成,但似乎字符串输入生产者返回了一个空队列。可能还有其他原因,代码不起作用。以下是代码:tensorflow string_input_producer给出了空队列

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) 

回答

0

如果您可以提供错误消息,这将有所帮助。

在同一时间,在这里对你的代码的一些言论:呼吁sess.run(tf.global_variables_initializer())如果之前

  • 方法input_pipeline定义关联到队列中的TensorFlow运营商,并将其添加到图形,所以你应该把它如果您希望您的队列由协调员启动,您希望队列成为图形的一部分,并在呼叫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) 
+0

你能不能也请告诉我如何与图形管线结合?我了解到,我们不能将张量输入图的占位符,在这种情况下,我应该如何给图输入输入?我有两个不同的队列中有一个训练集和一个测试集,是否可以将它们都输入到一个图中?如果我将一个图定义为一个函数,每次我调用它时它会创建一个新图还是返回相同的旧图? – ALeex

+0

基本上,流水线(例如'filename_queue','image','key',...)是图形的一部分。如果您不想使用feed_dict手动提供占位符张量,则可以使用图像张量将其直接输入到图形中。基本上,您只是像使用占位符一样使用您的出列操作。 我会推荐阅读[reading_data部分](https://www.tensorflow.org/programmers_guide/reading_data)并查看示例。 关于您最后的问题,本[部分](https://www.tensorflow.org/programmers_guide/variables)可能会引起您的兴趣。 – npf

+0

感谢您的帮助,我在阅读之前已经阅读了这个问题,但我仍然不确定阅读后应该怎么做。所以我会将filename_queue,image和key添加到图中。我想运行'sess.run([image,key])'会开始出队并通过图表?还是仅仅为了获得没有训练的图像张量?为了制作图表的管道部分,我没有发现如何同时提供训练集和测试集的管道,你知道吗? – ALeex