如何使用PyTorch在自定义图像数据集中创建火车分割?

时间:2020-03-07 11:48:01

标签: machine-learning deep-learning computer-vision pytorch torchvision

我想从我原来的火车组创建一个火车+乘车组。该目录分为训练和测试。我加载了原始训练集,并希望将其分为训练集和验证集,因此我可以在训练期间使用 train_loader val_loader 来避免验证损失。

关于此的文档并不多,可以清楚地说明事情。

1 个答案:

答案 0 :(得分:0)

查看答案here

我也将其发布在下方。

================================================ =======

使用for post in posts { let url = URL(string: "https://api.tdameritrade.com/v1/marketdata/\(post.symbol)/quotes")! ... } 读取数据。任务是对二进制图像进行分类,数据集中的498张图像在两个类别之间平均分布(每个图像249张)。

ImageFolder

1。 img_dataset = ImageFolder(..., transforms=t)

SubsetRandomSampler

2。 dataset_size = len(img_dataset) dataset_indices = list(range(dataset_size)) np.random.shuffle(dataset_indices) val_split_index = int(np.floor(0.2 * dataset_size)) train_idx, val_idx = dataset_indices[val_split_index:], dataset_indices[:val_split_index] train_sampler = SubsetRandomSampler(train_idx) val_sampler = SubsetRandomSampler(val_idx) train_loader = DataLoader(dataset=img_dataset, shuffle=False, batch_size=8, sampler=train_sampler) validation_loader = DataLoader(dataset=img_dataset, shuffle=False, batch_size=1, sampler=val_sampler)

这里,在498张图像中,随机分配了400张用于训练,其余98张用于验证。

random_split

3。 dataset_train, dataset_valid = random_split(img_dataset, (400, 98)) train_loader = DataLoader(dataset=dataset_train, shuffle=True, batch_size=8) val_loader = DataLoader(dataset=dataset_valid, shuffle=False, batch_size=1)

如果有人偶然在这里搜索WeightedRandomSampler,请查看@ptrblck的答案here,以获取对下面发生的事情的很好的解释。

现在,WeightedRandomSampler如何适合创建火车+定额集?因为与WeightedRandomSamplerSubsetRandomSampler不同,我们在这里不讨论火车和火车票。我们只是确保在培训过程中每批次获得相同数量的课程。

因此,我的猜测是我们需要在{strong> random_split()WeightedRandomSampler之后使用random_split()。但这不能确保train和val在类之间具有相似的比率。

SubsetRandomSampler