训练网络时;一直出现这种错误,
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