问题描述:
【功能模块】
Mindspore 1.5
【操作步骤&问题现象】
1、对比学习中需要载入正例与负例,来源于不同的数据集 PosDataSet 以及 NegDataSet,并且 两者的样本量不一致,现使用分别对着两个数据集使用RandomSampler采样
使用 batch 分别将数据集处理为 PosBatchDataSet 以及 NegBatchDataSet
2、为了使用Model的多卡并行功能,现需要将两个数据集合并为同一个数据集, 当 原PosBatchDataSet 或者 NegBatchDataSet 的batchSize为 64 时 ,希望合并后的数据集的batchSize为 128,其中前 64 个数据来源于 PosBatchDataSet, 后64个 来源于NegBatchDataSet
3. 问题:
a. 合并数据集是否可行,若可行可否提供参考
b. 是否可以使用DistributedSampler使用多机
c. 由于PosDataSet 以及 NegDataSet样本量不一致, 是否可以指定NegDataSet 重复采样,直到 PosDataSet 非重复采样结束
【截图信息】
class MakeDataset:
def __init__(self, length):
self.length = length
self.A = [np.ones((2, 2)) for _ in range(length)]
self.B = np.arange(length)
def __getitem__(self, index):
return self.A[index], self.B[index]
def __len__(self):
return self.length
batch_size = 64
pos_data_set = MakeDataset(1000)
neg_data_set = MakeDataset(1000)
pos_data_set = GeneratorDataset(pos_data_set, column_names=["A", "B"])
neg_data_set = GeneratorDataset(neg_data_set, column_names=["A", "B"])
pos_batch_data_set = pos_data_set.batch(batch_size)
neg_batch_data_set = neg_data_set.batch(batch_size)
# Merge(pos_batch_data_set, neg_batch_data_set)
解答:
建议把 NegBatchData 和 PosBatchData 放到同一个 MakeDataset里面,然后自己控制 NegSample -> NegBatch 和 PosSample -> PosBatch的逻辑,以及重复采样也可以在 __getitem__里面控制实现。即:通过MakeDataset 输出的就是已经混合好的 Batch。 按照上面的逻辑,只有一个MakeDataset,是可以使用 DistributedSampler的。
该博客讨论了在Mindspore中如何处理不同大小的数据集进行对比学习。操作步骤包括使用RandomSampler分别对正例和负例数据集采样,然后将两个采样后的数据集合并成一个,保持batchSize为128。问题集中在如何合并不等量的PosBatchDataSet和NegBatchDataSet,以及如何在多机环境中使用DistributedSampler。解决方案建议将两个数据集合并到一个MakeDataset中,控制采样逻辑并在__getitem__中实现重复采样,这样可以使用DistributedSampler进行多机训练。
3325

被折叠的 条评论
为什么被折叠?



