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

问题解决。


版权声明:本文为qq_35037684原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。