一、簡介
torch.utils.data.DataLoader是PyTorch自帶的一個數據加載器,常用於加載大規模數據集,尤其是超越了內存大小的數據集。其主要作用是把數據按照batch_size大小分成若干個小batch,然後在每個batch內部進行並行讀取數據,最後把一個batch的數據在返回給用戶。
DataLoader主要有以下幾個特點:
1. 多線程:DataLoader有一個num_workers參數,可以設置多個線程同時讀取數據,可以加快數據讀取速度。
2. 數據打亂:DataLoader有一個shuffle參數,可以打亂數據集,讓模型學習更加robust。
3. 預處理:DataLoader可以傳入自己的預處理函數,對數據集進行必要的變換,如數據增強、標準化等。
4. 可迭代:DataLoader繼承了Python的迭代器協議,可以方便地使用Python的for循環進行迭代。
二、用法
創建DataLoader實例的方式非常簡單,只需要傳入數據集、batch_size即可。下面的代碼演示了如何使用DataLoader進行數據集的讀取:
import torch import torch.utils.data as data train_data = data.TensorDataset(torch.Tensor([1, 2, 3, 4]), torch.Tensor([2, 4, 6, 8])) train_loader = data.DataLoader(train_data, batch_size=2, shuffle=True) for x, y in train_loader: print(x, y)
上述代碼創建了一個包含四個樣本的TensorDataset,並利用DataLoader將其劃分為batch_size為2的小batch,並進行了數據打亂,然後通過for循環來遍歷整個數據集。
三、常用參數
1. dataset
dataset參數是DataLoader的第一個參數,一般是一個Dataset對象,可以是PyTorch自帶的一些數據集,也可以是用戶自定義的數據集。Dataset對象本身也是一個抽象基類,需要實現__len__和__getitem__兩個方法。
2. batch_size
batch_size是指每個小batch的大小,默認是1。一般會根據內存大小和數據集的大小來進行設置,過小會造成CPU、GPU的空閑時間增加,過大會導致內存不足。一般情況下,batch_size的值是2的指數。
3. shuffle
shuffle參數是用於打亂數據集,讓模型更加robust。它可以在每個epoch開始時打亂數據集,也可以在DataLoader初始化時就進行打亂。一般情況下,打亂數據集的方式是隨機打亂數據集的樣本順序,從而避免網絡過擬合,提高模型泛化性能。
4. num_workers
num_workers參數是用於設置使用的線程數,默認值是0,即不使用線程。如果需要用到多線程讀取數據,可以設置num_workers參數,一般設置成CPU核數的一半即可。常用取值範圍是0-8。
5. pin_memory
pin_memory參數是用於設置是否將數據保存在CUDA支持的固定內存中,這樣可以避免重複的顯存和內存之間的數據傳輸,提高數據讀取和使用的速度。但是,這個參數只在使用CUDA方式時生效。
6. drop_last
drop_last參數是用於當batch_size不能整除數據集長度時,是否丟棄最後一個缺少數據的batch。一般情況下,不建議丟棄缺少數據的batch,因為這會導致一些數據得不到使用,從而影響模型性能。
四、總結
通過本文對PyTorch DataLoader進行詳細的介紹,我們可以發現DataLoader是PyTorch中一個很重要的模塊,可以實現數據加載、數據打亂、數據預處理、多線程等功能,避免了手動完成這些繁瑣的工作。因此,我們可以在實際的深度學習任務中積極地使用DataLoader模塊,從而提高整個模型訓練過程的效率。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/256539.html