TensorFlow字符串输入生成器大小()

TensorFlow字符串输入生成器大小(),tensorflow,Tensorflow,正在尝试对tf.train.string\u input\u producer r1.3创建的队列大小进行健全性检查,但在预期大小为3时,仅获取零大小 导入tensorflow作为tf file\u queue=tf.train.string\u input\u producer['file1.csv','file2.csv','file3.csv'] 打印'typefile_队列:{}'。格式化typefile_队列 将tf.Session作为SES: coord=tf.train.Coord

正在尝试对tf.train.string\u input\u producer r1.3创建的队列大小进行健全性检查,但在预期大小为3时,仅获取零大小

导入tensorflow作为tf file\u queue=tf.train.string\u input\u producer['file1.csv','file2.csv','file3.csv'] 打印'typefile_队列:{}'。格式化typefile_队列 将tf.Session作为SES: coord=tf.train.Coordinator threads=tf.train.start\u queue\u runnersoord=coord file\u queue\u size=sess.runfile\u queue.size 请求停止 坐标 打印“队列大小操作的结果:{}”。格式化文件\u队列\u大小 我的直觉是,有某种惰性的初始化正在进行,所以我想我应该向队列询问一个项目,然后看看它的大小

导入tensorflow作为tf file\u queue=tf.train.string\u input\u producer['file1.csv','file2.csv','file3.csv'] 打印'typefile_队列:{}'。格式化typefile_队列 将tf.Session作为SES: coord=tf.train.Coordinator threads=tf.train.start\u queue\u runnersoord=coord item=sess.runfile\u queue.dequeue file\u queue\u size=sess.runfile\u queue.size 请求停止 坐标 打印“队列大小操作的结果:{}”。格式化文件\u队列\u大小 虽然大小不再为零,但提供的大小不是两个,并且每次运行代码时都会更改


我觉得获取大小很简单,但可能这不是与数据流操作交互的方式。任何能解释这里发生的事情的见解都将不胜感激

这是异步性质的工件,队列由队列运行程序填充。请尝试以下代码:

import tensorflow as tf
import time

file_queue = tf.train.string_input_producer(['file1.csv','file2.csv','file3.csv'])

print('type(file_queue): {}'.format(type(file_queue)))

with tf.Session() as sess:

    coord = tf.train.Coordinator()
    threads = tf.train.start_queue_runners(coord=coord)
    time.sleep(1)
    file_queue_size = sess.run(file_queue.size())

    coord.request_stop()
    coord.join(threads)

print('result of queue size operation: {}'.format(file_queue_size))
输出应该是队列大小操作的结果:32。通过暂停主线程,队列运行程序可以运行足够长的时间来填满队列。 为什么是32而不是3?让我们看一下字符串\u输入\u生产者的签名:

这里需要注意两个主要事项:

num_epochs=None意味着永远在项目列表上迭代。要仅在列表上迭代一次,请设置num_epochs=1。您还需要调用sess.runtf.local\u variables\u初始值设定项。当num_epochs=1时,如果您在出列后运行size op,您将看到大小减小。 容量=32这是队列的默认容量。这就是为什么我们在上面的输出中看到的是32而不是3。
谢谢,这真的很有帮助,对TF文档来说是一个很好的补充。
string_input_producer(
    string_tensor,
    num_epochs=None,
    shuffle=True,
    seed=None,
    capacity=32,
    shared_name=None,
    name=None,
    cancel_op=None
)