使用MindSpore多数据集混合采样并加载

问题描述:

【功能模块】

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的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值