当前位置:  开发笔记 > 编程语言 > 正文

在Tensor Flow中访问文件队列中的文件名

如何解决《在TensorFlow中访问文件队列中的文件名》经验,为你挑选了1个好方法。

我有一个图像目录,以及一个单独的文件匹配图像文件名到标签.所以图像目录中有'train/001.jpg'等文件,标签文件如下:

train/001.jpg 1
train/002.jpg 2
...

通过从文件名创建文件队列,我可以轻松地从Tensor Flow中的图像目录加载图像:

filequeue = tf.train.string_input_producer(filenames)
reader = tf.WholeFileReader()
img = reader.read(filequeue)

但我对如何将这些文件与标签文件中的标签结合起来感到茫然.看来我需要在每一步都访问队列中的文件名.有办法获得它们吗?此外,一旦我有文件名,我需要能够查找由文件名键入的标签.似乎标准的Python字典不起作用,因为这些计算需要在图中的每一步发生.



1> dga..:

鉴于您的数据不是太大,您无法将文件名列表作为python数组提供,我建议您只使用Python进行预处理.创建文件名和标签的两个列表(相同顺序),并将它们插入randomshufflequeue或队列中,然后从中出列.如果你想要string_input_producer的"循环无限"行为,你可以在每个纪元的开头重新运行'enqueue'.

一个非常玩具的例子:

import tensorflow as tf

f = ["f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8"]
l = ["l1", "l2", "l3", "l4", "l5", "l6", "l7", "l8"]

fv = tf.constant(f)
lv = tf.constant(l)

rsq = tf.RandomShuffleQueue(10, 0, [tf.string, tf.string], shapes=[[],[]])
do_enqueues = rsq.enqueue_many([fv, lv])

gotf, gotl = rsq.dequeue()

with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    tf.train.start_queue_runners(sess=sess)
    sess.run(do_enqueues)
    for i in xrange(2):
        one_f, one_l = sess.run([gotf, gotl])
        print "F: ", one_f, "L: ", one_l

关键是当你这样做时,你有效地将文件名/标签对排入队列enqueue,并且这些对由...返回dequeue.

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有