为什么match\u filenames\u once函数返回一个本地变量

2024-04-25 06:03:06 发布

您现在位置: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 (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得到本地的吗?我能控制它吗?你知道吗


Tags: run代码图像imagequeuetftensorflowmatch