我有两个数据加载器,我想在不重新定义数据集的情况下合并它们,在我的例子中是train_dataset和val_dataset。
train_loader = DataLoader(train_dataset, batch_size = 512, drop_last=True,shuffle=True)
val_loader = DataLoader(val_dataset, batch_size = 512, drop_last=False)想要的结果:
train_loader = train_loader + val_loader 发布于 2021-01-08 07:59:25
数据加载器是迭代器,您可以实现一个函数来返回一个迭代器,该迭代器产生数据加载器的内容,一个接一个数据加载器。
给定多个迭代器itrs,它将遍历每个迭代器,然后遍历每个迭代器,一次产生一个批。一种可能的实现就像下面这样简单:
def itr_merge(*itrs):
for itr in itrs:
for v in itr:
yield v下面是一个使用示例:
>>> dl1 = DataLoader(TensorDataset(torch.zeros(5, 1)), batch_size=2, drop_last=True)
>>> dl2 = DataLoader(TensorDataset(torch.ones(10, 1)), batch_size=2)
>>> for x in itr_merge(dl1, dl2):
>>> print(x)
[tensor([[0.], [0.]])]
[tensor([[0.], [0.]])]
[tensor([[1.], [1.]])]
[tensor([[1.], [1.]])]
[tensor([[1.], [1.]])]
[tensor([[1.], [1.]])]
[tensor([[1.], [1.]])]发布于 2021-08-31 11:08:12
在https://pytorch.org/docs/stable/_modules/torch/utils/data/dataset.html#ConcatDataset中有一个可用的ConcatDataset。您可以在将数据集传递给DataLoader之前将其连接起来
import torch
from torch.utils.data import TensorDataset, ConcatDataset, DataLoader
dsa = TensorDataset(torch.rand(100, 3), torch.rand(100, 1) )
dsb = TensorDataset(torch.rand(150, 3), torch.rand(150, 1) )
dsab_cat = ConcatDataset([dsa, dsb])
dsab_cat_loader = DataLoader(dsab_cat)发布于 2021-11-20 11:51:01
返回一个张量列表,您可以像通常迭代DataLoader那样迭代训练张量
trainval = [d for dl in [train_loader, val_loader] for d in dl]https://stackoverflow.com/questions/65621414
复制相似问题