‘_1_shuffle_batch/random_shuffle_queue’ is closed and has insufficient elements1

‘_1_shuffle_batch/random_shuffle_queue’ is closed and has insufficient elements1训练网络时;一直出现这种错误,   TFRecordReader"OutOfRangeError(seeabovefortraceback):RandomShuffleQueue’_1_shuffle_batch/random_shuffle_queue’isclosedandhasinsufficientelements(requested1,current…

_1_shuffle_batch/random_shuffle_queue



训练网络时;一直出现这种错误,   

TFRecordReader “OutOfRangeError (see above for traceback): RandomShuffleQueue ‘_1_shuffle_batch/random_shuffle_queue’ is closed and has insufficient elements (requested 1, current size 0)” ;

1. tf.decode_raw(features[‘image_raw’],tf.uint8) 解码时,数据类型有没有错?tf.float32 和tf.uint8有没有弄混???

2. tf.train.string_input_producer([data_file],num_epochs=1) 如果设置num_epochs=1参数,请添加上 tf.local_variables_initializer()

3. 你的数据集通道有没有搞错?真的都是三通道或者都是单通道么?有没有可能单通道图像混在在三通道图像当中呢?

4. 图像的大小之前resize了么?前后一直么?

 5.查找资料后终于找到解决办法:因为局部变量(local variables)没有初始化,将初始化变量语句改为

        全局变量初始化:tf.global_variables_initializer().run()

        局部变量初始化:tf.local_variables_initializer().run()

6.看一下图像路径是不是有空格,有空格,也会报这种错误

7

     

一般来说:capacity的计算公式是: capacity=min_after_dequeue+3*batch_size

1.capacity的计算不对会引发这个问题,

2.num_threads=64 也会引发这个问题,解决方法:把这个暂时去掉,原因尚未知

image_batch, label_batch = tf.train.shuffle_batch([image,label],  batch_size=batch_size,  # num_threads=64,  capacity=capacity,  min_after_dequeue=1000)

解决方法:把num_threads=64 删掉

image_batch, label_batch = tf.train.shuffle_batch([image,label],  batch_size=batch_size,  # num_threads=64,  capacity=capacity,  min_after_dequeue=1000)

8:图像有损坏,检测是否损坏,用try和except进行异常处理

def get_trainfiles(file_dir,i):
    first = []
    label_first = []
    middle = []
    label_middle = []
    end1 = []
    label_end1 = []
    only = []
    label_only = []
    j=0
    #定义存放各类别数据和对应标签的列表,列表名对应你所需要分类的列别名
    #A5,A6等是我的数据集中要分类图片的名字
    cout=0
    for file in os.listdir(file_dir):
        for file1 in os.listdir(file_dir+'/'+file):
            for file2 in os.listdir(file_dir+'/'+file+'/'+file1): 
                for file3 in os.listdir(file_dir+'/'+file+'/'+file1+'/'+file2): 
                    dir=file_dir+'/'+file+'/'+file1+'/'+file2 +'/'+ file3
                    if 'C.jpg' in file3:
                        #print(Image.open(dir))
                        try:
                           image=Image.open(dir) 
                        except IOError:
                               print(dir)
                               print ("Error: 没有找到文件或读取文件失败")                               
                        else:
                             print(dir)
                             only.append(dir)
                             label_only.append(0)
                             cout=cout+1       
                    elif 'CB.jpg' in file3:
                        try:
                           image=Image.open(dir) 
                        except IOError:
                               print(dir)
                               print ("Error: 没有找到文件或读取文件失败")                               
                        else:
                             print(dir)
                             end1.append(dir)
                             label_end1.append(3)
                             cout=cout+1    
                    elif 'CA.jpg' in file3:
                        try:
                           image=Image.open(dir) 
                        except IOError:
                               print(dir)
                               print ("Error: 没有找到文件或读取文件失败")                              
                        else:
                             print(dir)
                             first.append(dir)
                             label_first.append(1)
                             cout=cout+1 
                    elif('C.jpg' not in file3) and ('CA.jpg' not in file3)and ('CB.jpg' not in file3)and ('.jpg' in file3):
                        try:                           
                           image=Image.open(dir) 
                        except IOError:
                               print(dir)
                               print ("Error: 没有找到文件或读取文件失败")                               
                        else:
                             print(dir)
                             middle.append(dir)
                             label_middle.append(2)
                             cout=cout+1                        
                    else:
                        j=j+1 
                    if cout==i:
                        break                  
    print('There are %d first\nThere are %d middle\nThere are %d end1\nThere are %d only' %(len(first),len(middle),len(end1),len(only)))                
                        
    image_list = np.hstack((first,middle,end1,only)) 
    label_list = np.hstack((label_first,label_middle,label_end1,label_only))
    #用来水平合并数组

    temp = np.array([image_list,label_list])
    temp = temp.transpose()
    np.random.shuffle(temp)

    image_list = list(temp[:,0])
    label_list = list(temp[:,1])
    label_list = [int(i) for i in label_list]  
   
    return  image_list,label_list

总结一下:一般遇到这个错误,代码本身没有问题,基本上都是参数不一致和图像数据集导致的,注意检查各个参数。

今天的文章‘_1_shuffle_batch/random_shuffle_queue’ is closed and has insufficient elements1分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/32875.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注