我试图了解使用队列读取图像的张量流的机制。我使用的代码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
获得本地人资格?我可以以某种方式控制它吗?