1. 程式人生 > >如何使用tf.data讀取tfrecords資料集

如何使用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')

這樣的方法就不需要你剛剛那樣每次還需要修改,只需要更改檔案路徑就好了。