paddle框架(paddlepaddle版本时2.0.1)下在自定义的dataset上使用dataloader的时候,__getitem__(self, index):函数抛出异常会报错:

  File "train.py", line 103, in train
    for iterx,(inputx,labelx) in enumerate(train_loader()):
  File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dataloader/dataloader_iter.py", line 351, in __next__
    return 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类型

但是在使用过程中,又发现了新问题,在使用GPU加载时,即使返回numpy.ndarray类型,也会因为返回值使用过reshape函数报同样的错

def __getitem__(self,index):
	...
	label_T = img_cat_T[:,:,3][np.newaxis,:,:]
	# label_T = img_cat_T[:,:,3].reshape(1,-1,-1) #System Error
	...
	return label_T

如上,注释的代码与未注释的在numpy下执行同样的操作,但是reshape会报错,估计是个bug

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐