使用next(iter(data.DataLoader())报错StopIteration

使用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)

问题解决。

猜你喜欢

转载自blog.csdn.net/qq_35037684/article/details/120743996