欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-19 13:25:58
...

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')

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