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快速实现迁移学习

tf-slim 批量规范:训练/推理模式之间的不同行为

使用 TF-Slim 在我自己的数据上微调预训练的 VGG16 模型

使用 TF-slim 训练的模型与 python 推理完美配合,但使用 C++ 给出完全错误的结果

Tensorflow(辅助工具)--tensorflow slim(TF-Slim) 使用笔记

Opencv+TF-Slim实现图像分类及深度特征提取