以十为单位使用队列运行器时出错

2024-04-19 02:50:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我是tensorflow的新手,现在正在学习如何使用queue runner。我要做的是从dir中读取二进制文件,并将每个文件变成一个数组。我使用两个线程,一批生成4个数组。代码如下。你知道吗

  import glob

  import tensorflow as tf

  def readfile(filenames_queue):

        filename = filenames_queue.dequeue()
        value_strings = tf.read_file(filename)
        array = tf.decode_raw(value_strings,tf.uint8)
        return [array]
 def input_pipeline(filenames,batch_size,num_threads=2):

       filenames_queue = tf.train.string_input_producer(filenames)
       thread_lists = [readfile(filenames_queue) for _ in range(num_threads)] 
       min_after_dequeue = 1000 
       capacity = min_after_dequeue+3*batch_size
       arrays = tf.train.shuffle_batch_join(thread_lists,batch_size,capacity,min_after_dequeue)
       return arrays
if __name__ == "__main__":

      filenames = glob.glob('dir/*')
      arrays_batch = input_pipeline(filenames,4)
      with tf.Session() as sess:
           tf.global_variables_initializer().run()
           coord = tf.train.Coordinator()
           threads = tf.train.start_queue_runners(sess,coord)
           for i in range(100):
                 print sess.run(arrays_batch)
           coord.request_stop()
           coord.join(threads)

我已经纠正了维克托和索林指出的错误,但出现了一个新的错误:

“文件”输入_队列.py,第36行,打印中赛斯·润(im\U数组\U批处理)

文件“/usr/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/会话.py,第889行,运行中 运行元数据(ptr)

文件“/usr/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/会话.py,第1120行 提要(dict张量、选项、运行元数据)

文件“/usr/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/会话.py“,第1317行,在\u do \u run” 选项,运行(元数据)

文件“/usr/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/会话.py“,第1336行,在\u do \u call中” 提升类型(e)(节点定义、操作、消息) tensorflow.python.framework框架.错误_impl.outofrange错误:randomsufflequeue“\u 1\u shuffle\u batch\u join/random\u shuffle\u queue”已关闭,元素不足(请求2,当前大小为0) [[节点:shuffle\u batch\u join=QueueDequeueManyV2[组件类型=[DT\u UINT8],超时\u ms=-1,\u设备=”/作业:本地主机/副本:0/任务:0/设备:CPU:0“](shuffle\u batch\u join/random\u shuffle\u queue,shuffle\u batch\u join/n)]]

由opu'shuffle\u batch\u join'引起,定义为:

“文件”输入_队列.py,第30行,英寸 im\u arrays\u batch=输入\u管道(文件名,2)

“文件”输入_队列.py“,第23行,输入\u管道中” 数组\u批=tf.train.shuffle\批量\加入(线程列表、批大小、容量、出列后的最小值)

文件“/usr/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/training/输入.py,第1367行,在shuffle\u batch\u join中 name=名称)

文件“/usr/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/training/输入.py,第833行,在\u shuffle\u batch\u join中 出列=queue.dequeue\许多(批量大小,名称=名称)

文件“/usr/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/data\u flow_ops.py公司“,第464行,正在出列” self.\u queue\u ref,n=n,component\u types=self.\u dtypes,name=name)

文件“/usr/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/ops/gen\u data\u flow_ops.py公司“,第2418行,在\u queue\u dequeue\u many\u v2中” 组件类型=组件类型,超时\u ms=超时\u ms,名称=名称)

文件“/usr/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/op\u def_库.py“,\u apply\u op\u helper中的第787行” op_def=op_def)

文件“/usr/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py公司,第2956行,在“创建”操作中 op_def=op_def)

文件“/usr/local/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py公司“,第1470行,在init中” self.\u traceback=self.\u graph.\u extract_stack()#pylint:disable=protected访问

OutOfRangeError(请参阅上面的跟踪):RandomShuffleQueue“\u 1\u shuffle\u batch\u join/random\u shuffle\u queue”已关闭,元素不足(请求2,当前大小为0) [[节点:shuffle\u batch\u join=QueueDequeueManyV2[组件类型=[DT\u UINT8],超时\u ms=-1,\u设备=”/作业:本地主机/副本:0/任务:0/设备:CPU:0“](shuffle\u batch\u join/random\u shuffle\u queue,shuffle\u batch\u join/n)]]


Tags: 文件pyqueuelibpackagesusrlocaltf
2条回答

tf.train.shuffle_batch_join

The tensors_list argument is a list of tuples of tensors

在这里,您对^{} produces ^{} instances的调用,并将它们放入带有thread_lists = [readfile(filenames_queue) for _ in range(num_threads)]的列表中。你知道吗

因此,它不是一个张量元组列表,而是一个张量列表,因此这些张量试图被迭代,因此出现了错误TypeError: 'Tensor' object is not iterable。你知道吗

你的readfile(...):函数应该返回一个iterable,这样你就可以返回特性和标签或者其他类似的东西。你知道吗

因此,要修复代码,请将readfile(...):更改为

return [arrays]

相关问题 更多 >