在使用paddle的dataloader的时候,如果def getitem(self, index):函数发生异常会报错:
ERROR:root:DataLoader reader thread raised an exception!
Traceback (most recent call last):File "train.py", line 28, in for i, (image1, image2, label) in enumerate(loader()):File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dataloader/dataloader_iter.py", line 788, in __next__data = self._reader.read_next_var_list()
SystemError: (Fatal) Blocking queue is killed because the data reader raises an exception.[Hint: Expected killed_ != true, but received killed_:1 == true:1.] (at /paddle/paddle/fluid/operators/reader/blocking_queue.h:158)
这里记录一点碰到的坑,使用paddle的dataloader不能返回tensor,需要返回np类型,实在无语啊
如图,圈起来的那句话在使用cpu的时候是可以正常加载数据的,但是!!!!如果使用gpu就会报上面的错误,修改成注释的那句返回在cpu和gpu的情况下就不会报错了,注释的返回就是返回了np类型。
估计是个bug…用的是paddlepaddle2.0.0不知道会不会修复。
Tips:
如果实在找不到这个异常的原因可以写一段代码测试,直接遍历要传入dataloader的dataset,这个dataset是列表的类型,如果有异常就会报错python的错误可以来debug。