如何使用tf.data读取tfrecords数据集

tfrecords有一个问题就是如果数据集图片数量太大了,使用传统的方法tf.train.string_input_producer,就会报OutOfRangeError这个错误,至今我不知道怎么解决,找了无数方法也不知道怎么解决,不过引起的原因大部分是因为数据格式不一致,比如图片有一部分unit8的灰度图,但是你其实在制作RGB三通道的数据集,这样图片格式不一致就会报错,具体原因可以看我其他博客,有一个就是介绍可能引起来的各种方法。

 

  1. 在制作数据集之前,首先要检查数据集的格式,查看是否一致,图片的格式主要有RGB,RGBA,L,P,
import os
import tensorflow as tf
from PIL import Image

cwd = r'/home/hehe/python/deeplearning/pan/'
num=0
for img_name in os.listdir(cwd):
    img_path = cwd + img_name
    img = Image.open(img_path)
    print(num,img_name ,img )

将输出结果粘贴到word里面,然后查找model=RGBA,找到所有非RGB的图片删除,这一步很关键,如果不删除后面的数据集很可能就不能用。

如果你的文件夹和你的标签对应得上,那么使用这种方式也可以的

#下面的代码是为了生成list.txt , 把不同文件夹下的图片和 数字label对应起来
import os

path=r"/user/huanglong/jiao/"

output_path = 'list.txt'
fd = open(output_path, 'w')
cate = [path + x for x in os.listdir(path) if os.path.isdir(path + x)]
# os.path.splitext(DATA_URL.split("/")[-1])[0]
for index, folder in enumerate(cate):
    name=os.path.splitext(folder.split("/")[-1])[0]
    for im in os.listdir(folder):
        fd.write('{}/{} {}\n'.format(name, im, name))
fd.close()
print('finish task')

这样的方法就不需要你刚刚那样每次还需要修改,只需要更改文件路径就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值