如何使用PyTorch同时迭代两个数据加载器?

我在尝试实现一个双胞胎网络,该网络需要输入两张图片。我加载这些图片并创建了两个独立的数据加载器。

在我的循环中,我希望同时遍历这两个数据加载器,以便能够用这两张图片训练网络。

for i, data in enumerate(zip(dataloaders1, dataloaders2)):    # 获取输入    inputs1 = data[0][0].cuda(async=True);    labels1 = data[0][1].cuda(async=True);    inputs2 = data[1][0].cuda(async=True);    labels2 = data[1][1].cuda(async=True);    labels1 = labels1.view(batchSize,1)    labels2 = labels2.view(batchSize,1)    # 清零参数梯度    optimizer.zero_grad()    # 前向传播 + 反向传播 + 优化    outputs1 = alexnet(inputs1)    outputs2 = alexnet(inputs2)

数据加载器的返回值是一个元组。然而,当我尝试使用zip来迭代它们时,我得到了以下错误:

OSError: [Errno 24] Too many open filesException NameError: "global name 'FileNotFoundError' is not defined" in <bound method _DataLoaderIter.__del__ of <torch.utils.data.dataloader._DataLoaderIter object at 0x7f2d3c00c190>> ignored                           

zip不应该可以处理所有可迭代的项目吗?但在这里似乎我不能在数据加载器上使用它。

还有其他方法可以实现吗?或者我对双胞胎网络的实现方法有什么误解吗?


回答:

我看到你在努力创建一个正确的数据加载器函数。我会这样做:

class Siamese(Dataset):    def __init__(self, transform=None):           #在这里初始化数据        def __len__(self):        return   #返回数据的长度    def __getitem__(self, idx):        #在这里获取图片和标签         #返回的图片必须是张量        #标签应该是整数         return img1, img2 , label1, label2 

Related Posts

Keras Dense层输入未被展平

这是我的测试代码: from keras import…

无法将分类变量输入随机森林

我有10个分类变量和3个数值变量。我在分割后直接将它们…

如何在Keras中对每个输出应用Sigmoid函数?

这是我代码的一部分。 model = Sequenti…

如何选择类概率的最佳阈值?

我的神经网络输出是一个用于多标签分类的预测类概率表: …

在Keras中使用深度学习得到不同的结果

我按照一个教程使用Keras中的深度神经网络进行文本分…

‘MatMul’操作的输入’b’类型为float32,与参数’a’的类型float64不匹配

我写了一个简单的TensorFlow代码,但不断遇到T…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注