我分别有 x_data 和标签。如何使用 将它们组合并加载到模型中torch.utils.data.DataLoader
?
我有一个我创建的数据集,训练数据有 20k 个样本,标签也是分开的。假设我想在模型中加载一个数据集,每次洗牌并使用我喜欢的批量大小。Dataloader 函数就是这样做的。如何将它们组合并放入函数中,以便我可以在 pytorch 的模型中对其进行训练?
我分别有 x_data 和标签。如何使用 将它们组合并加载到模型中torch.utils.data.DataLoader
?
我有一个我创建的数据集,训练数据有 20k 个样本,标签也是分开的。假设我想在模型中加载一个数据集,每次洗牌并使用我喜欢的批量大小。Dataloader 函数就是这样做的。如何将它们组合并放入函数中,以便我可以在 pytorch 的模型中对其进行训练?
假设x_data
和labels
都是列表或 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__()
,您将在其中传递X
和y
到__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))