使用pytorch在dataloader中加载自己的火车数据和标签?

数据挖掘 Python 数据集 预处理 火炬
2021-09-27 01:15:26

我分别有 x_data 和标签。如何使用 将它们组合并加载到模型中torch.utils.data.DataLoader

我有一个我创建的数据集,训练数据有 20k 个样本,标签也是分开的。假设我想在模型中加载一个数据集,每次洗牌并使用我喜欢的批量大小。Dataloader 函数就是这样做的。如何将它们组合并放入函数中,以便我可以在 pytorch 的模型中对其进行训练?

2个回答

假设x_datalabels都是列表或 numpy 数组,

train_data = []
for i in range(len(x_data)):
   train_data.append([x_data[i], labels[i]])

trainloader = torch.utils.data.DataLoader(train_data, shuffle=True, batch_size=100)
i1, l1 = next(iter(trainloader))
print(i1.shape)

我认为标准方法是从数组创建一个Dataset类对象并将Dataset对象传递给DataLoader.

一种解决方案是从 Dataset 类继承并定义一个自定义类来实现__len__()__get__(),您将在其中传递Xy__init__(self,X,y).

对于具有两个数组的简单情况,__get__()除了获取 row 中的值之外不需要特殊函数i,您还可以使用将数组转换为Tensor对象并将它们传递给TensorDataset.

运行以下代码以获取自包含示例。

# Create a dataset like the one you describe
from sklearn.datasets import make_classification
X,y = make_classification()

# Load necessary Pytorch packages
from torch.utils.data import DataLoader, TensorDataset
from torch import Tensor

# Create dataset from several tensors with matching first dimension
# Samples will be drawn from the first dimension (rows)
dataset = TensorDataset( Tensor(X), Tensor(y) )

# Create a data loader from the dataset
# Type of sampling and batch size are specified at this step
loader = DataLoader(dataset, batch_size= 3)

# Quick test
next(iter(loader))