# -*- coding:UTF-8 -*-import tensorflow as tfimport osdef 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_batchif __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图片。我还没有到达文件列表的末尾。我只想知道为什么?这个问题已经花了我整整4个小时,还没有解决方案。谁能帮帮我?非常感谢!!!!
回答:
请检查输出,看看是否有任何形状不匹配的错误。
您分享的示例代码在我使用全是3通道图像的数据集时是有效的。后来我添加了一张灰度图像,并观察到了您看到的错误。