OutOfRangeError(请参阅上面的回溯):RandomShuffleQueue'_1总是出现..,为什么?

时间:2018-07-27 05:16:40

标签: python-3.x tensorflow machine-learning deep-learning

# -*- coding:UTF-8 -*-
import tensorflow as tf
import os

def picread(fileList):
    """
    读取狗图片并转换成张量
    :param fileList: 文件路径 + 名字的列表
    :return: 每张图片的张量
    """

    # 1. 构造文件队列
    file_queue = tf.train.string_input_producer(filelist)
    print(file_queue)
    # 2. 构造阅读器去读取图片内容(默认是按一张图片)
    reader = tf.WholeFileReader()
    key,value = reader.read(file_queue)

    # 3. 对读取的图片数据进行解码
    image = tf.image.decode_jpeg(value)

    # 4. 处理图片的大小(统一大小)
    image_resize = tf.image.resize_images(image,[200,200])

    image_resize.set_shape([200,200,3])  # 批处理要求形状必须固定

    # 4. 进行批处理
    image_batch = tf.train.shuffle_batch([image_resize],min_after_dequeue=10,batch_size=20,num_threads=1,capacity=40)

    return image_batch


if __name__ == "__main__":

    file_names = os.listdir("/Users/yuxiao/Desktop/test1/")
    filelist = [os.path.join("/Users/yuxiao/Desktop/test1/",file) for file in file_names]
    print(len(filelist))
    image_batch = picread(filelist)

    with tf.Session() as sess:
        sess.run(tf.local_variables_initializer())
        # 定义一个线程协调器
        coord = tf.train.Coordinator()

        # 开启读文件的线程
        threads = tf.train.start_queue_runners(sess,coord=coord)
        for i in range(200):
            print("第",i,"次")
            sess.run([image_batch])
        # 回收子线程
        coord.request_stop()
        coord.join(threads)

OutOfRangeError(请参阅上面的回溯):RandomShuffleQueue'_1_shuffle_batch / random_shuffle_queue'已关闭且元素不足(要求15,当前大小为10)

异常总是出现,并且是随机出现的,有时是180,有时是170。我的文件夹中有5890+个小jpg图像。它没有到达文件列表的末尾。我只想知道为什么?这个问题花了我整整四个小时的时间,没有解决办法。谁能帮助我?非常感谢!!!!

1 个答案:

答案 0 :(得分:0)

请检查输出以查看是否出现任何形状不匹配错误。

当我使用包含所有3个通道图像的数据集时,您共享的示例代码对我有用。后来我添加了GrayScale图像,并观察到您看到的错误。