创建火车,对嵌套在多个文件夹中的数据进行测试拆分

时间:2020-11-09 19:27:34

标签: python machine-learning pytorch

我正在准备用于训练图像识别模型的数据。我目前有一个文件夹(数据集),其中包含带有标签名称的多个文件夹,并且这些文件夹中包含图像。

我想以某种方式拆分此数据集,以使我有两个具有相同子文件夹的主文件夹,但是这些文件夹中的图像数量是根据首选训练/测试划分的,例如,其中90%的图像火车数据集和测试数据集中的10%。

我正在努力寻找分割数据的最佳方法。我已经读过一个建议,即pytorch torch.utils.Dataset类可能是实现此目的的一种方法,但是我似乎无法使其工作以保持文件夹层次结构。

1 个答案:

答案 0 :(得分:0)

如果您具有这样的文件夹结构:

torchvision.datasets.ImageFolder

您可以仅使用类root/dog/xxx.png root/dog/xxy.png root/dog/xxz.png root/cat/123.png root/cat/nsdf3.png root/cat/asd932_.png

pytorch网站上所述

以这种方式排列图像的通用数据加载器:

dataset = torchvision.datasets.Imagefolder(YOUR_PATH, ...)

然后,在创建ImageFolder实例后,例如这样

test_size = 0.1 * len(dataset)
test_set = torch.utils.data.Subset(dataset, range(test_size))  # take 10% for test
train_set = torch.utils.data.Subset(dataset, range(test_size, len(dataset)) # the last part for train

您可以按以下方式拆分它:

indexes = shuffle(range(len(dataset)))
indexes_train = indexes[:int(len(dataset)*0.9)]
indexes_test = = indexes[int(len(dataset)*0.9):]

如果要对拆分进行混洗,请记住,类子集使用索引进行拆分。因此,您可以随机播放并拆分它们。做这样的事情

Package.swift