2017-01-29 36 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

相关问题