在訓練神經網絡時,最好是對一個batch的數據進行操作,同時還需要對數據進行shuffle和並行加速等。對此,PyTorch提供了DataLoader幫助我們實現這些功能。
DataLoader的函數定義如下:
DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, num_workers=0, collate_fn=default_collate, pin_memory=False, drop_last=False)
dataset:加載的數據集(Dataset對象)
batch_size:batch size
shuffle::是否將數據打亂
sampler: 樣本抽樣,后續會詳細介紹
num_workers:使用多進程加載的進程數,0代表不使用多進程
collate_fn: 如何將多個樣本數據拼接成一個batch,一般使用默認的拼接方式即可
pin_memory:是否將數據保存在pin memory區,pin memory中的數據轉到GPU會快一些
drop_last:dataset中的數據個數可能不是batch_size的整數倍,drop_last為True會將多出來不足一個batch的數據丟棄
def main(): import visdom import time viz = visdom.Visdom() db = Pokemon('pokeman', 224, 'train') x,y = next(iter(db)) ## print('sample:',x.shape,y.shape,y) viz.image(db.denormalize(x),win='sample_x',opts=dict(title='sample_x')) loader = DataLoader(db,batch_size=32,shuffle=True) for x,y in loader: #為了得一個一個的數據集形式的數據每一組32張 viz.images(db.denormalize(x),nrow=8,win='batch',opts = dict(title = 'batch')) viz.text(str(y.numpy()),win = 'label',opts=dict(title='batch-y')) time.sleep(10)
在數據處理中,有時會出現某個樣本無法讀取等問題,比如某張圖片損壞。這時在_ getitem _函數中將出現異常,此時最好的解決方案即是將出錯的樣本剔除
pytorch 數據處理:定義自己的數據集合
