日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pytorch dataset dataloader_PyTorch(五)——数据的加载和预处理

發布時間:2024/1/23 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pytorch dataset dataloader_PyTorch(五)——数据的加载和预处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

PyTorch通過torch.utils.data對一般的常用數據進行封裝,可以很容易地實現多線程數據預讀和批量加載。torchvision已經預先實現了常用的圖像數據集,包括CIFAR-10、ImageNet、COCO、MNIST、LSUN等數據集,可以通過torchvision.datasets進行方便的調用。

Dataset

在PyTorch中,Dataset是圖像數據集中最為重要的一個類,也是所有數據集加載類都需要繼承的父類。自定義的繼承自Dataset的子類需要繼承Dataset的兩個成員方法:

  • def __getitem__(self, index):該方法定義用索引(0~len(self))獲取一條數據或一個樣本。
  • def __len__(self):該方法返回數據集的總長度。
  • 下面利用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對象時常常用到如下參數:

  • batch_size:每個batch的大小,可用于分批次讀取。
  • shuffle:是否進行shuffle洗牌操作,可用于對數據進行隨機讀取。
  • num_workers:加載數據時使用的子進程數量,可用于實現并行加載數據。
  • my_loader = torch.utils.data.DataLoader(my_data, batch_size=10, shuffle=True, num_workers=0)

    上述代碼實例化了一個簡單的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的子模塊中包含以下模型結構:

  • AlexNet
  • VGG
  • ResNet
  • SqueezeNet
  • DenseNet
  • 與torchvision.datasets一樣,要使用torchvision.models中訓練好的模型,同樣需要從服務器進行下載。

    下載模型

    當pretrained設置為True時就可以使用預訓練的模型了。

    • torchvision.transforms

    torchvision.transforms提供了常用的圖像轉換操作類,可以用作數據處理和數據增強。

    總結

    以上是生活随笔為你收集整理的pytorch dataset dataloader_PyTorch(五)——数据的加载和预处理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。