我试图理解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 (see above for traceback): FIFOQueue '_0_input_producer' is closed and has insufficient elements (requested 1, current size 0)
这会导致搜索丢失的图像、错误的文件夹、错误的全局模式等,直到我发现tensorflow的基本意思是: “您还需要初始化局部变量”!你知道吗
除了代码在最初的gist中似乎只使用这个替换之外:
tf.initialize_all_variables().run()
而不是
tf.global_variables_initializer().run()
在我的代码中它不起作用。它产生同样的错误。我想它已经用tensorflow开发改变了initialize_all_variables()
的实现(我使用的是1.3.0),因为在here中它还提到初始化局部变量。你知道吗
所以,我得出的最终结论是,我也应该初始化局部变量。我的代码起作用了。这个错误消息是非常误导性的(这一点也没有帮助),但是不管怎样,对于主要部分,我有点困惑为什么我要通过match_filenames_once
得到一个局部变量。在documentation中没有关于这一点的参考(我不确定它是否应该)。你知道吗
我总是从这个match_filenames_once
得到本地的吗?我能控制它吗?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐