2017-01-29 44 views

回答

21

是的,那是可能的。只需自己創建對象,例如

import torch.utils.data as data_utils 

train = data_utils.TensorDataset(features, targets) 
train_loader = data_utils.DataLoader(train, batch_size=50, shuffle=True) 

其中featurestargets是張量。 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自動找出第二個維度的長度)

+0

我有3D功能:2D圖像和一個額外尺寸的顏色通道。如果我將這些功能作爲5000xnxnx3傳遞,它會繼續工作嗎? 5000是數據點的數量nxnx3是圖像大小 – Sarthak

+0

基本上是的,但檢查我的答案的編輯。 – pho7

+0

4d數據集可以作爲功能傳遞,不需要查看語句。 – Sarthak

5

您可以輕鬆地做到這可以擴展data.Dataset類。 根據API,您所要做的只是實現兩個功能:__getitem____len__

然後,您可以使用DataLoader包裝數據集,如API和@ pho7的答案中所示。

我認爲ImageFolder類是一個參考。請參閱代碼here

相關問題