TypeError: Caught TypeError in DataLoader worker process 0.

参考资料

  1. Python迭代DataLoader时出现TypeError: Caught TypeError in DataLoader worker process 0.错误。

问题描述

用构造的数据集去训练网络过程,迭代DataLoader出现TypeError的错误,Caught TypeError in DataLoader worker process 0

解决问题

参考资料1),出错原因是数据集的标签缺失,不完整。 查看自己的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
files = os.listdir(anger_path)
files.sort()
for filename in files:
I = skimage.io.imread(os.path.join(anger_path,filename))
image = cv2.imread(os.path.join(anger_path,filename))
res, flag = get_mask(image)
data_x.append(I.tolist())
data_y.append(0)


if flag == True:
res = res * 255
seg_image_data = res.tolist()
data_z.append(seg_image_data)
imageCount = imageCount + 1
print(imageCount)

data_x与data_y的数据是直接添加的,而data_z是经过if判断的,False时,就不会添加。这样就导致某一条记录里面没有data_z这个标签,为了解决这个问题,需将data_x和data_y的数据添加移到if条件中,实现data_x,data_y和data_z三个同步添加。即

1
2
3
4
5
6
7
8
9
10
11
12
13
14
files = os.listdir(anger_path)
files.sort()
for filename in files:
I = skimage.io.imread(os.path.join(anger_path,filename))
image = cv2.imread(os.path.join(anger_path,filename))
res, flag = get_mask(image)
if flag == True:
data_x.append(I.tolist())
data_y.append(0)
res = res * 255
seg_image_data = res.tolist()
data_z.append(seg_image_data)
imageCount = imageCount + 1
print(imageCount)