pytorch-TensorFlow-加載直接的數據集

在我剛剛學習深度學習的時候,就只會用現有的數據集。當我想訓練直接的模型的時候,卻不知道該怎樣弄,但時是花了兩天在網上尋找教程,可是都不太適合新手學習,所以今天我就來總結一下pytorch裏面加載自己的數據集的方法。

方法一:利用torch.utils.data.TensorDataset,也是我認爲最簡單的方法

from torch.utils.data import TensorDataset,DataLoader
x =       #對應你加載的數據   是tensor類型
y = 	   #對應你數據的標籤  是tensor類型
data_set = TensorDataset(x,y)   
data_loader = DataLoader(data_set,batch_size = 100,shuffle = True,drop_last = True) #生成可迭代的迭代器

#訓練時
for index (img,label) in enumerate(data_loaer):
	#訓練代碼

方法二:重寫Dataset類

from torch.utils.data import Dataset,DataLoader
class dataset(Dataset):  #繼承Dataset類
	def __init__(self,root,transform=None):  #root爲你數據的路徑  下面以圖片爲例
	imgs = os.listdir(root)    #返回root裏面所用文件的名稱
	self.img = [os.path.join(root,img) for img in imgs]  #生成每張照片的路徑
	self.transform = transform  #對圖片的一些處理
	def __getitem__(self,index):
		img_path = self.img(index)
		label = 0 if 'woman' in img_path.split('/')[-1] else 1 #自己根據文件名來設置標籤,例如這裏是文件名包不包含woman。
		data =  Image.open(img_path) #讀取圖片,在PIL庫中
		data = self.transform(data)   #對圖片進行裝換,一定要轉換成tensor
		return data,label    #返回圖片和其標籤
	def __len__(self):
		return len(self.img)   #返回數據的大小

data = dataset(root)
data_loader = DataLoader(data,batch_size=100,shuffle=True,drop_last= True)
							#batch_size每一次迭代數據的大小				shuffle對圖片是否打散  	drop_last對最後的數據如果不滿足batch_size的大小就捨棄
		

方法三:利用ImageFolder對圖片進行讀取
ImageFolder是對整個文件夾進行對取,每個文件夾的內容,會自動被歸爲一類。

from torchvision.datasets import ImageFolder
data = ImageFolder(root)  #root的根目錄放保存每一類的文件夾
data_loader = DataLoader(data,batch_size=100,shuffle=True,drop_last= True)

基於這三種簡單易行的方法,你可以很方便的根據你數據的存放的形式進行構造自己的數據集。

下面介紹一下tf 2.0的構造自己的數據集,先看一下代碼吧,也不難。

import tensorflow as tf
x =     #數據。numpy類型 
y =		#標籤。numpy類型
# x,y tensor類型的我還沒嘗試過你可以去轉換成tensor類型的試試。
data = tf.data.Dataset.slices((x,y))
data_load = data.repeat().shuffle(5000).batch(128).prefetch(1)

for step , (x,y) in enumerate(data_load.take(2000),1):
	

這種方法與pytorch的第一種方法類似。
prefetch(x) ,表示預先準備下x次迭代的數據,提高效率。
batch , 表示每一次迭代的數據大小,比如圖片的話就是每一次迭代128張圖片的數據。
shuffle(x) ,表示打亂數據的次序,x表示打亂的次數,每一次迭代算一次。
take(x) ,表示訓練的epoch數,在pytorch裏面需要在外面在嵌套一次for循環來設置訓練的epochs數。

Thank for your reading !!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章