为什么match_filenames_once函数返回一个局部变量

时间:2018-01-03 12:40:23

标签: python tensorflow

我试图了解使用队列读取图像的张量流的机制。我使用的代码here,基本部分是:

filename_queue = tf.train.string_input_producer(tf.train.match_filenames_once('D:/Dataset/*.jpg'))
image_reader = tf.WholeFileReader()
image_name, image_file = image_reader.read(filename_queue)
image = tf.image.decode_jpeg(image_file)

with tf.Session() as sess:
    tf.global_variables_initializer().run()

    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)

    image_tensor = sess.run([image])
    print(image_tensor)

实际上并没有什么特别之处。我收到了一个错误:

  

OutOfRangeError(参见上面的回溯):FIFOQueue   '_0_input_producer'已关闭且元素不足(请求   1,当前大小0)

导致搜索丢失的图像,错误的文件夹,错误的glob模式等,直到我发现tensorflow基本上意味着: “你还需要初始化局部变量”!

除了代码似乎在原始gist中使用这个替换的事实:

tf.initialize_all_variables().run()

而不是

tf.global_variables_initializer().run()

在我的代码中它不起作用。它产生相同的错误。我猜它已经改变了initialize_all_variables()与tensorflow开发的实现(我使用的是1.3.0),因为在here中它提到它也初始化局部变量。

所以,我得出的最终结论是我也应该初始化局部变量。我的代码工作正常。错误消息非常误导(这根本没有帮助),但无论如何,我有点困惑为什么我会通过match_filenames_once得到一个局部变量。在documentation中没有关于此的参考(我不确定它应该如何)。

我是否总是从match_filenames_once获得本地人资格?我可以以某种方式控制它吗?

0 个答案:

没有答案