我想将训练数据集、测试数据集和验证数据集保存在 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个文件夹,一个包含真正的训练部分,一个包含验证部分data_train
和 data_validation
是否存在,在这种情况下,即使不存在,也不应该再次下载 data_all_train
通过尝试对已下载的训练数据集的负载使用随机分割,您的方向是正确的。但是您不必将拆分结果保存在单独的文件夹中以保持可重复性,这就是我假设您要问的真正问题。
您应该在调用 split 之前修复种子,如下所示:
torch.manual_seed(42)
data_train, data_val = torch.utils.data.random_split(data_all_train, [0.7, 0.3])
然后您只需维护这两个文件夹,同时确保火车和 val 分割一致。