如何在自己的数据(而不仅仅是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