pytorch dataset dataloader_PyTorch(五)——数据的加载和预处理
前言
PyTorch通過torch.utils.data對一般的常用數據進行封裝,可以很容易地實現多線程數據預讀和批量加載。torchvision已經預先實現了常用的圖像數據集,包括CIFAR-10、ImageNet、COCO、MNIST、LSUN等數據集,可以通過torchvision.datasets進行方便的調用。
Dataset
在PyTorch中,Dataset是圖像數據集中最為重要的一個類,也是所有數據集加載類都需要繼承的父類。自定義的繼承自Dataset的子類需要繼承Dataset的兩個成員方法:
下面利用Kaggle上的某個競賽數據自定義一個數據集,該數據集可直接從Kaggle官網下載,為了方便起見,可通過如下途徑獲取:鏈接: https://pan.baidu.com/s/1MfDa1Ff53LSgefXUN3o8yg 提取碼: exu5。
首先引入相應的模塊。
from torch.utils.data import Datasetimport pandas as pd然后自定義數據集,繼承自Dataset并實現__getitem__( )與__len__( )兩個成員方法。
自定義數據集
以上代碼自定義了一個非常簡單的數據集MyDataSet,在初始化方法__init__( )中加載數據并將其賦值給一個DataFrame,然后實現__getitem__( )與__len__( )兩個成員方法,分別返回指定的一條數據和數據集的長度。
定義好一個數據集后,可以通過實例化一個對象進行相關的訪問。
實例化自定義數據集
由于我們自定義的數據集MyDataSet實現了__len__( )方法,因此可以直接使用len( )函數獲取數據集長度。實現__getitem__( )方法后,可以直接通過索引訪問對應的數據。
DataLoader
上述的MyDataSet類可以讀入數據集數據并對讀入的數據進行索引,但是顯然在實際應用中僅僅擁有這個功能是遠遠不夠的,通常我們還需要以下幾個功能:
DataLoader為我們提供了對Dataset的各種操作,可以幫我們實現以上功能,在實例化DataLoader對象時常常用到如下參數:
上述代碼實例化了一個簡單的DataLoader對象,其中batch_size為10,表示每個batch的大小為10,shuffle為Ture,表示對數據進行洗牌操作,num_workers為0,表示不進行并行加載數據。
DataLoader返回的是一個可迭代對象,可以使用迭代器分次獲取數據。當然,由于batch要求必須包含Tensor或NumPy數組或Numbers或字典或列表,因此我們在使用前需要修改上述MyDataSet中的__getitem__( )方法,將return self.df.iloc[index]修改為return self.df.iloc[index].SalePrice只返回單列數據。
DataLoader
更常見的用法是使用for-in循環對其進行遍歷讀取。
for-in循環遍歷DataLoader
原始數據有點多,這里只打印了前5條數據。
torchvision
torchvision是PyTorch專門用于處理圖像的庫,常用的模塊有torchvision.datasets、torchvision.models和torchvision.transforms。
- torchvision.datasets
torchvision.datasets提供了很多提前處理好的圖片數據集,例如MNIST、COCO、Captions、LSUN等,用戶可以直接使用。例如我們利用torchvision.datasets下載MNIST數據集,參數root表示數據加載的目錄,train表示是否加載數據的訓練集(True加載訓練集,False加載測試集),download表示是否自動下載數據集,transform表示是否需要對數據進行預處理(None為不進行預處理)。
下載數據集
運行上述代碼就會開始下載MNIST數據集,因為train參數設置為True,所以下載的是MNIST的訓練集。下載結束后,就可以在當前路徑下發現新生成了一個data目錄,里面已經有下載好的MNIST訓練集了。
- torchvision.models
torchvision.models為用戶提供了已經訓練好的模型,用戶可以在加載后直接使用,也可以在進行遷移學習torchvision.models的子模塊中包含以下模型結構:
與torchvision.datasets一樣,要使用torchvision.models中訓練好的模型,同樣需要從服務器進行下載。
下載模型
當pretrained設置為True時就可以使用預訓練的模型了。
- torchvision.transforms
torchvision.transforms提供了常用的圖像轉換操作類,可以用作數據處理和數據增強。
總結
以上是生活随笔為你收集整理的pytorch dataset dataloader_PyTorch(五)——数据的加载和预处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 没有终结点在侦听可以接受消息的_【大卫聊
- 下一篇: google bigtable论文原文_