在 PyTorch 中分别保存到磁盘训练数据集和验证数据集

问题描述 投票:0回答:1

我想将训练数据集、测试数据集和验证数据集保存在 3 个单独的文件夹中。

执行此操作进行培训和测试很简单

# Get training and testing data
all_training_data = getattr(datasets, config['Pytorch_Dataset']['dataset'])(
    root= path_to_data + "/data_all_train_" + config['Pytorch_Dataset']['dataset'],
    train=True,
    download=True, # If present it will not download the data again
    transform=ToTensor()
)
test_data = getattr(datasets, config['Pytorch_Dataset']['dataset'])(
    root= path_to_data + "/data_test_" + config['Pytorch_Dataset']['dataset'],
    train=False,
    download=True, # If present it will not download the data again
    transform=ToTensor()
)

此代码使用

torchvision.datasets
加载并保存到磁盘
config['Pytorch_Dataset']['dataset']
中指定的数据集(例如 MNIST)。但是,没有以这种方式加载验证集的选项,没有
validation=True
选项。

我可以使用

torch.utils.data.random.split
将训练数据集拆分为训练和验证,但这种方法有两个主要问题:

  • 我不想保存文件夹
    data_all_train
    ,我只想保存2个文件夹,一个包含真正的训练部分,一个包含验证部分
  • 我希望 PyTorch 能够了解
    data_train
    data_validation
    是否存在,在这种情况下,即使不存在,也不应该再次下载
    data_all_train
python validation pytorch dataset save
1个回答
0
投票

通过尝试对已下载的训练数据集的负载使用随机分割,您的方向是正确的。但是您不必将拆分结果保存在单独的文件夹中以保持可重复性,这就是我假设您要问的真正问题。

您应该在调用 split 之前修复种子,如下所示:

torch.manual_seed(42)
data_train, data_val = torch.utils.data.random_split(data_all_train, [0.7, 0.3])

然后您只需维护这两个文件夹,同时确保火车和 val 分割一致。

© www.soinside.com 2019 - 2024. All rights reserved.