【发布时间】:2018-12-28 20:31:49
【问题描述】:
我正在尝试实现一个接收两个图像的连体网络。我加载这些图像并创建两个单独的数据加载器。
在我的循环中,我想同时通过两个数据加载器,以便我可以在两个图像上训练网络。
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 不应该对所有可迭代项都有效吗?但似乎在这里我不能在数据加载器上使用它。
还有其他方法可以解决这个问题吗?还是我错误地实现了连体网络?
【问题讨论】:
-
与其制作两个数据加载器,我认为如果你只从一个数据加载器返回两个图像会容易得多。
-
由于数据加载器将图像分成批次,我是否只需将批次大小设为 2?
标签: python machine-learning zip conv-neural-network pytorch