Pytorch在一个Batch内加载两个大小不等的Dataset

在使用Pytorch进行训练时,有时需要在一个batch同时加载两个不同的数据集。考虑到两个数据集大小可能不同,遍历两个数据及可以按如下操作:

dataloaders1 = DataLoader(DummyDataset(0, 100), batch_size=10, shuffle=True)
dataloaders2 = DataLoader(DummyDataset(0, 200), batch_size=10, shuffle=True)
num_epochs = 10

for epoch in range(num_epochs):
    dataloader_iterator = iter(dataloaders1)
    
    for i, data1 in enumerate(dataloaders2)):

        try:
            data2 = next(dataloader_iterator)
        except StopIteration:
            dataloader_iterator = iter(dataloaders1)
            data2 = next(dataloader_iterator)

        do_cool_things()

Reference:
https://stackoverflow.com/a/57890309/9492373

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
PyTorch中,你可以使用`torch.utils.data.ConcatDataset`来将两个不同的`Dataset`对象合并为一个数据集,然后使用`torch.utils.data.DataLoader`来加载数据。下面是一个示例代码,演示了如何在两个不同的数据集中分别取数据: ```python import torch from torch.utils.data import DataLoader, ConcatDataset # 定义两个不同的数据集 dataset1 = YourDataset1() # 自定义第一个数据集 dataset2 = YourDataset2() # 自定义第二个数据集 # 合并两个数据集为一个 concat_dataset = ConcatDataset([dataset1, dataset2]) # 定义数据加载batch_size = 32 data_loader = DataLoader(concat_dataset, batch_size=batch_size, shuffle=True) # 迭代加载数据 for batch_data in data_loader: # 在这里进行你的训练或测试操作 data1, target1 = batch_data[0] # 第一个数据集的数据和标签 data2, target2 = batch_data[1] # 第二个数据集的数据和标签 # 其他操作... ``` 在这个示例中,我们首先定义了两个不同的数据集`dataset1`和`dataset2`,你需要根据实际情况自定义这两个数据集。然后,我们使用`ConcatDataset`将两个数据集合并成一个`concat_dataset`。接下来,我们定义了`DataLoader`,并指定了合适的`batch_size`和其他参数。最后,在迭代加载数据时,我们可以通过索引访问`batch_data`来获取不同数据集中的数据和标签。 请注意,合并的数据集中的数据顺序会根据`shuffle`参数进行随机打乱。如果你希望每个数据集内部的数据顺序保持不变,但是两个数据集之间的顺序随机打乱,你可以将`shuffle=True`设置在`DataLoader`中,而不是在`ConcatDataset`中。 希望这个示例能帮助你在PyTorch中分别取两个数据集的数据。如果有更多的问题,请随时提问!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tinet-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值