如何在自己的數據(而不僅僅是torchvision.datasets
)上使用torch.utils.data.Dataset
和torch.utils.data.DataLoader
?PyTorch:如何使用DataLoaders進行自定義數據集
有沒有辦法使用內置的DataLoaders
,他們使用TorchVisionDatasets
在任何數據集上使用?
如何在自己的數據(而不僅僅是torchvision.datasets
)上使用torch.utils.data.Dataset
和torch.utils.data.DataLoader
?PyTorch:如何使用DataLoaders進行自定義數據集
有沒有辦法使用內置的DataLoaders
,他們使用TorchVisionDatasets
在任何數據集上使用?
是的,那是可能的。只需自己創建對象,例如
import torch.utils.data as data_utils
train = data_utils.TensorDataset(features, targets)
train_loader = data_utils.DataLoader(train, batch_size=50, shuffle=True)
其中features
和targets
是張量。 features
必須是2-D,即每個線代表一個訓練樣本的矩陣,並且targets
可以是1-D或2-D,這取決於您是否試圖預測標量或矢量。
希望有幫助!
編輯:響應@ sarthak的問題
基本上是肯定的。如果創建TensorData
類型的對象,然後構造調查的特徵張量的第一個維度(這實際上是所謂data_tensor
)和目標張量(稱爲target_tensor
)是否具有相同的長度:
assert data_tensor.size(0) == target_tensor.size(0)
然而,如果你想隨後將這些數據輸入神經網絡,那麼你需要小心。雖然卷積層處理像你這樣的數據,但我認爲所有其他類型的層都期望數據以矩陣形式給出。所以,如果遇到這樣的問題,那麼一個簡單的解決方案就是使用方法view
將4D數據集(作爲某種張量給出,例如FloatTensor
)轉換爲矩陣。爲了您的5000xnxnx3的數據集,這將是這樣的:
2d_dataset = 4d_dataset.view(5000, -1)
(該值-1
告訴PyTorch自動找出第二個維度的長度)
我有3D功能:2D圖像和一個額外尺寸的顏色通道。如果我將這些功能作爲5000xnxnx3傳遞,它會繼續工作嗎? 5000是數據點的數量nxnx3是圖像大小 – Sarthak
基本上是的,但檢查我的答案的編輯。 – pho7
4d數據集可以作爲功能傳遞,不需要查看語句。 – Sarthak