我正在尝试实现一个包含两个图像的连体网络。我加载这些图像并创建两个单独的数据加载器。
在我的循环中,我想同时通过两个数据加载器,以便我可以在两个图像上训练网络。
for i, data in enumerate(zip(dataloaders1, dataloaders2)):
# get the inputs
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)
# zero the parameter gradients
optimizer.zero_grad()
# forward + backward + optimize
outputs1 = alexnet(inputs1)
outputs2 = alexnet(inputs2)
数据加载器的返回值是一个元组。但是,当我尝试使用 zip
迭代它们时,出现以下错误:
OSError: [Errno 24] Too many open files
Exception NameError: "global name 'FileNotFoundError' is not defined" in <bound method _DataLoaderIter.__del__ of <torch.utils.data.dataloader._DataLoaderIter object at 0x7f2d3c00c190>> ignored
zip 不应该适用于所有可迭代的项目吗?但似乎在这里我不能在数据加载器上使用它。
还有其他方法可以追求这个吗?还是我错误地接近了 Siamese 网络的实施?
原文由 aa1 发布,翻译遵循 CC BY-SA 4.0 许可协议
我看到您正在努力实现正确的数据加载器功能。我会做: