我正在使用SubsetRandomSampler将分类数据集拆分为测试集和验证集。我们能否为每个类别拆分数据集?
回答:
你是指训练集和验证集而不是测试集和验证集吗?
如果是这样的话,SubsetRandomSampler
会从索引中随机选择样本。因此,你可以在将它们放入train_indices
和val_indices
之前,首先随机拆分每个类别的索引。
像这样
indexs = [[] for _ in range(len(dataset.classes))] # 你不能使用 `[[]] * len(dataset.classes)`。虽然可能有更好的方法,但我不知道for idx, (_, class_idx) in enumerate(dataset): indexs[class_idx].append(idx)train_indices, val_indices = [], []for cl_idx in indexs: size = len(cl_idx) split = int(np.floor(validation_split * size)) np.random.shuffle(cl_idx) train_indices.extend(cl_idx[split:]) val_indices.extend(cl_idx[:split])train_sampler = SubsetRandomSampler(train_indices)valid_sampler = SubsetRandomSampler(val_indices)