Neural network 使用数据加载程序在PyTorch中验证数据集

Neural network 使用数据加载程序在PyTorch中验证数据集,neural-network,pytorch,Neural Network,Pytorch,我想在PyTorch和Torchvision中加载MNIST数据集,将其分为训练、验证和测试部分。到目前为止,我已经: def load_dataset(): train_loader = torch.utils.data.DataLoader( torchvision.datasets.MNIST( '/data/', train=True, download=True, transform=torchvision.tra

我想在PyTorch和Torchvision中加载MNIST数据集,将其分为训练、验证和测试部分。到目前为止,我已经:

def load_dataset():
    train_loader = torch.utils.data.DataLoader(
        torchvision.datasets.MNIST(
            '/data/', train=True, download=True,
            transform=torchvision.transforms.Compose([
                torchvision.transforms.ToTensor()])),
        batch_size=batch_size_train, shuffle=True)

    test_loader = torch.utils.data.DataLoader(
        torchvision.datasets.MNIST(
            '/data/', train=False, download=True,
            transform=torchvision.transforms.Compose([
                torchvision.transforms.ToTensor()])),
        batch_size=batch_size_test, shuffle=True)

如果培训数据集位于
数据加载器中,如何将其划分为培训和验证?我想使用培训数据集中的最后10000个示例作为验证数据集(我知道我应该进行CV以获得更准确的结果,我只想在这里进行快速验证)。

在PyTorch中将培训数据集拆分为培训和验证,结果证明比实际困难得多

首先,将训练集拆分为训练和验证子集(类
子集
),它们是数据集(类
数据集
):

然后从这些数据集中获取实际数据:

X_train = train_subset.dataset.data[train_subset.indices]
y_train = train_subset.dataset.targets[train_subset.indices]

X_val = val_subset.dataset.data[val_subset.indices]
y_val = val_subset.dataset.targets[val_subset.indices]
请注意,通过这种方式,我们没有
数据集
对象,因此我们不能使用
数据加载器
对象进行批量培训。如果要使用数据加载器,它们直接与子集一起工作:

train_loader = DataLoader(dataset=train_subset, shuffle=True, batch_size=BATCH_SIZE)
val_loader = DataLoader(dataset=val_subset, shuffle=False, batch_size=BATCH_SIZE)

这回答了你的问题吗@哈拉什:是和否,进一步阅读后,这似乎是一个更复杂的问题。我已经找到了解决方案,但它比普通库中的要复杂得多。是的……就是这样
val_loader
应该将
val_subset
作为数据集参数,而不是
train_subset
,对吗?@R.Rayl是的,当然,我会编辑这个
train_loader = DataLoader(dataset=train_subset, shuffle=True, batch_size=BATCH_SIZE)
val_loader = DataLoader(dataset=val_subset, shuffle=False, batch_size=BATCH_SIZE)