使用next(iter(data.DataLoader())报错StopIteration,这是因为当使用next()去访问一个已经迭代完的迭代器时,就会有触发这样的报错:StopIteration,即dataloader导入数据之后经过了一轮的迭代,再次导入的时候发现没有数据了,也就是iterable完成之后,触发了StopIteration,然后跳出了循环
解决方法:
既然再次导入的时候没有数据了,那我们就再用一个dataloader就行了。
将train.py中的
inps, targets = next(self.batch_iterator)
更改成:
try:
inps, targets = next(self.batch_iterator)
except StopIteration:
self.batch_iterator = iter(data.DataLoader(self.train_dataset, self.args.batch_size, shuffle=True, num_workers=self.args.num_workers, collate_fn=detection_collate))
inps, targets = next(self.batch_iterator)
问题解决。