Tensorflow:如何使用“输入数据读取器队列”创建随机输入图像掩码?

时间:2017-03-23 17:19:56

标签: tensorflow

我有一些代码可以在tensorflow中为输入图像创建随机掩码。

mask = get_random_mask(...) # Returns some tensor in the shape of the input images

然而,使用

生成一批输入图像
coord = tf.train.Coordinator()
image_list, label_list , img_type = read_labeled_image_list(data_dir, data_list)
images = tf.convert_to_tensor(image_list, dtype=tf.string)
labels = tf.convert_to_tensor(label_list, dtype=tf.string)
queue = tf.train.slice_input_producer([images, labels],shuffle=True)
image, label = read_images_from_disk(queue)
image_batch, label_batch = tf.train.batch([image, label], batch_size)

然后使用

启动创建输入批处理数据的线程
config = tf.ConfigProto()
config.gpu_options.allow_growth = True
sess = tf.Session(config=config)
init = tf.global_variables_initializer()
sess.run(init)
threads = tf.train.start_queue_runners(coord=coord, sess=sess)

然而,经过几次迭代后,程序失败并出现此错误:

OutOfRangeError (see above for traceback): FIFOQueue '_1_create_inputs/batch/fifo_queue' is closed and has insufficient elements (requested 2, current size 0)
     [[Node: create_inputs/batch = QueueDequeueMany[_class=["loc:@create_inputs/batch/fifo_queue"], component_types=[DT_FLOAT, DT_UINT8, DT_FLOAT], timeout_ms=-1, _device="/job:localhost/replica:0/task:0/cpu:0"](create_inputs/batch/fifo_queue, create_inputs/batch/n)]]

我很确定错误的结果是,掩码的生成速度与输入图像和标签批次不同。但是我不知道如何告诉Tensorflow以相同的速度创建蒙版。有没有人有想法?

我是否必须在与image_list相同大小的开头创建随机掩码列表?

2 个答案:

答案 0 :(得分:0)

生产率不会导致这样的错误;下游队列只会暂时阻止。此错误似乎表明训练数据集已用尽,并且未给出再次读取它的指令(或已达到明确的纪元限制)。通常string_input_producer num_epochs=None(默认值)会无限期地循环遍历数据集。

答案 1 :(得分:0)

我发现了错误。实际上错误信息是非常误导的。它与FIFOQueueinsufficient elements (requested 2, current size 0)中的任何一个无关 我最终检查了预处理过程中的每个张量尺寸。使用蒙版时,我有一些尺寸不匹配。不幸的是,“空队列”错误是非常误导的。对不起,解决方案很糟糕。还要感谢你的帮助@Allen Lavoie