首頁 > 軟體

PyTorch中torch.utils.data.DataLoader簡單介紹與使用方法

2022-06-22 14:02:58

一、torch.utils.data.DataLoader 簡介

作用:torch.utils.data.DataLoader 主要是對資料進行 batch 的劃分。

資料載入器,結合了資料集和取樣器,並且可以提供多個執行緒處理資料集。

在訓練模型時使用到此函數,用來 把訓練資料分成多個小組 ,此函數 每次丟擲一組資料 。直至把所有的資料都丟擲。就是做一個資料的初始化。

好處:

使用DataLoader的好處是,可以快速的迭代資料。

用於生成迭代資料非常方便。

注意:

除此之外,特別要注意的是輸入進函數的資料一定得是可迭代的。如果是自定的資料集的話可以在定義類中用def__len__、def__getitem__定義。

二、範例

BATCH_SIZE 剛好整除資料量

"""
    批訓練,把資料變成一小批一小批資料進行訓練。
    DataLoader就是用來包裝所使用的資料,每次丟擲一批資料
"""
import torch
import torch.utils.data as Data

BATCH_SIZE = 5       # 批訓練的資料個數

x = torch.linspace(1, 10, 10)   # 訓練資料
print(x)
y = torch.linspace(10, 1, 10)   # 標籤
print(y)
# 把資料放在資料庫中
torch_dataset = Data.TensorDataset(x, y)  # 對給定的 tensor 資料,將他們包裝成 dataset

loader = Data.DataLoader(
    # 從資料庫中每次抽出batch size個樣本
    dataset=torch_dataset,       # torch TensorDataset format
    batch_size=BATCH_SIZE,       # mini batch size
    shuffle=True,                # 要不要打亂資料 (打亂比較好)
    num_workers=2,               # 多執行緒來讀資料
)

def show_batch():
    for epoch in range(3):
        for step, (batch_x, batch_y) in enumerate(loader):
            # training
            print("steop:{}, batch_x:{}, batch_y:{}".format(step, batch_x, batch_y))

show_batch()

輸出結果:

tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
tensor([10.,  9.,  8.,  7.,  6.,  5.,  4.,  3.,  2.,  1.])
steop:0, batch_x:tensor([10.,  1.,  3.,  7.,  6.]), batch_y:tensor([ 1., 10.,  8.,  4.,  5.])
steop:1, batch_x:tensor([8., 5., 4., 9., 2.]), batch_y:tensor([3., 6., 7., 2., 9.])
steop:0, batch_x:tensor([ 9.,  3., 10.,  1.,  5.]), batch_y:tensor([ 2.,  8.,  1., 10.,  6.])
steop:1, batch_x:tensor([2., 6., 8., 4., 7.]), batch_y:tensor([9., 5., 3., 7., 4.])
steop:0, batch_x:tensor([ 2., 10.,  9.,  6.,  1.]), batch_y:tensor([ 9.,  1.,  2.,  5., 10.])
steop:1, batch_x:tensor([8., 3., 4., 7., 5.]), batch_y:tensor([3., 8., 7., 4., 6.])

說明:共有 10 條資料,設定 BATCH_SIZE 為 5 來進行劃分,能劃分為 2 組(steop 為 0 和 1)。這兩組資料互斥。

BATCH_SIZE 不整除資料量:會輸出餘下所有資料

將上述程式碼中的 BATCH_SIZE 改為 4 :

"""
    批訓練,把資料變成一小批一小批資料進行訓練。
    DataLoader就是用來包裝所使用的資料,每次丟擲一批資料
"""
import torch
import torch.utils.data as Data

BATCH_SIZE = 4       # 批訓練的資料個數

x = torch.linspace(1, 10, 10)   # 訓練資料
print(x)
y = torch.linspace(10, 1, 10)   # 標籤
print(y)
# 把資料放在資料庫中
torch_dataset = Data.TensorDataset(x, y)  # 對給定的 tensor 資料,將他們包裝成 dataset

loader = Data.DataLoader(
    # 從資料庫中每次抽出batch size個樣本
    dataset=torch_dataset,       # torch TensorDataset format
    batch_size=BATCH_SIZE,       # mini batch size
    shuffle=True,                # 要不要打亂資料 (打亂比較好)
    num_workers=2,               # 多執行緒來讀資料
)

def show_batch():
    for epoch in range(3):
        for step, (batch_x, batch_y) in enumerate(loader):
            # training
            print("steop:{}, batch_x:{}, batch_y:{}".format(step, batch_x, batch_y))

show_batch()

輸出結果:

tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9., 10.])
tensor([10.,  9.,  8.,  7.,  6.,  5.,  4.,  3.,  2.,  1.])
steop:0, batch_x:tensor([1., 5., 3., 2.]), batch_y:tensor([10.,  6.,  8.,  9.])
steop:1, batch_x:tensor([7., 8., 4., 6.]), batch_y:tensor([4., 3., 7., 5.])
steop:2, batch_x:tensor([10.,  9.]), batch_y:tensor([1., 2.])
steop:0, batch_x:tensor([ 7., 10.,  5.,  2.]), batch_y:tensor([4., 1., 6., 9.])
steop:1, batch_x:tensor([9., 1., 6., 4.]), batch_y:tensor([ 2., 10.,  5.,  7.])
steop:2, batch_x:tensor([8., 3.]), batch_y:tensor([3., 8.])
steop:0, batch_x:tensor([10.,  3.,  2.,  8.]), batch_y:tensor([1., 8., 9., 3.])
steop:1, batch_x:tensor([1., 7., 5., 9.]), batch_y:tensor([10.,  4.,  6.,  2.])
steop:2, batch_x:tensor([4., 6.]), batch_y:tensor([7., 5.])

說明:共有 10 條資料,設定 BATCH_SIZE 為 4 來進行劃分,能劃分為 3 組(steop 為 0 、1、2)。分別有 4、4、2 條資料。

參考連結

  1. torch.utils.data.DataLoader使用方法
  2. 【Pytorch基礎】torch.utils.data.DataLoader方法的使用

總結

到此這篇關於PyTorch中torch.utils.data.DataLoader簡單介紹與使用方法的文章就介紹到這了,更多相關PyTorch中torch.utils.data.DataLoader內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com