TF-slim : FIFOQueue 已关闭且元素不足(请求 1,当前大小 0)
Posted
技术标签:
【中文标题】TF-slim : FIFOQueue 已关闭且元素不足(请求 1,当前大小 0)【英文标题】:TF-slim : FIFOQueue is closed and has insufficient elements (requested 1, current size 0) 【发布时间】:2017-10-11 20:19:25 【问题描述】:我尝试使用 slim 来制作我自己的数据集并读取它。 当我试图读入它时,我收到以下错误:
raise type(e)(node_def, op, message) tensorflow.python.framework.errors_impl.OutOfRangeError:FIFOQueue '_2_parallel_read/common_queue' 已关闭且不足 元素(请求 1,当前大小 0)[[节点: parallel_read/common_queue_Dequeue = QueueDequeueV2component_types=[DT_STRING, DT_STRING], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"]] [[节点:case/If_2/DecodePng/_117 = _Recvclient_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_12_case/If_2/DecodePng", tensor_type=DT_UINT8, _device="/job:localhost/replica:0/task:0/gpu:0"]]
由 op u'parallel_read/common_queue_Dequeue' 引起,定义在:
OutOfRangeError(参见上面的回溯):FIFOQueue '_2_parallel_read/common_queue' 已关闭且不足 元素(请求 1,当前大小 0)[[节点: parallel_read/common_queue_Dequeue = QueueDequeueV2component_types=[DT_STRING, DT_STRING], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"]] [[节点:case/If_2/DecodePng/_117 = _Recvclient_terminated=false, recv_device="/job:localhost/replica:0/task:0/gpu:0", send_device="/job:localhost/replica:0/task:0/cpu:0", send_device_incarnation=1, tensor_name="edge_12_case/If_2/DecodePng", tensor_type=DT_UINT8, _device="/job:localhost/replica:0/task:0/gpu:0"]]
Fifo 队列好像是空的(没有填满),和我想的一样……
有人知道 slim 的哪个部分负责填充 FiFO 吗? 这是我尝试的代码:
dataset_name = 'toto'
dataset_split_name = 'train'
dataset_dir = './dataset/'
num_readers = 1
batch_size = 2
output_padding = 5
dataset_id = 3
num_max_target = 5
num_preprocessing_threads = 1
num_epochs = None
with tf.Graph().as_default():
dataset = dataset_factory.get_dataset(dataset_name, dataset_split_name, dataset_dir, dataset_id)
provider = slim.dataset_data_provider.DatasetDataProvider(dataset, num_readers=num_readers,
common_queue_capacity=10*batch_size, common_queue_min=5*batch_size, num_epochs=num_epochs,shuffle=False)
img = provider.get(['frame'])
i = tf.train.shuffle_batch([tf.reshape(img, shape=[512, 512, 1])],
batch_size=batch_size,
num_threads=num_preprocessing_threads,
capacity=2*batch_size,
min_after_dequeue=batch_size)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())
coord = tf.train.Coordinator()
threads = tf.train.start_queue_runners(coord=coord)
img = sess.run(img)
print('ok ok')
coord.request_stop()
coord.join(threads)
【问题讨论】:
我发现了问题:这是因为在我的数据集中我没有只有特征“框架”。所以当我创建一个数据集,然后是一个提供者时,提供者想要给我所有的特征到数据集中,而不仅仅是一个“框架”。 你是怎么解决的?考虑将其发布为答案(并接受它) 【参考方案1】:我在 train.py
文件中将分布式训练的函数从 tf.distribute.Server()
更改为 tf.train.Server()
并且它起作用了。
【讨论】:
以上是关于TF-slim : FIFOQueue 已关闭且元素不足(请求 1,当前大小 0)的主要内容,如果未能解决你的问题,请参考以下文章
使用 TF-Slim 在我自己的数据上微调预训练的 VGG16 模型
使用 TF-slim 训练的模型与 python 推理完美配合,但使用 C++ 给出完全错误的结果