如何使用tf.data讀取tfrecords資料集
阿新 • • 發佈:2019-02-02
tfrecords有一個問題就是如果資料集圖片數量太大了,使用傳統的方法tf.train.string_input_producer,就會報OutOfRangeError這個錯誤,至今我不知道怎麼解決,找了無數方法也不知道怎麼解決,不過引起的原因大部分是因為資料格式不一致,比如圖片有一部分unit8的灰度圖,但是你其實在製作RGB三通道的資料集,這樣圖片格式不一致就會報錯,具體原因可以看我其他部落格,有一個就是介紹可能引起來的各種方法。
- 在製作資料集之前,首先要檢查資料集的格式,檢視是否一致,圖片的格式主要有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')
這樣的方法就不需要你剛剛那樣每次還需要修改,只需要更改檔案路徑就好了。