yinchangchang / ocr_densenet

第一届西安交通大学人工智能实践大赛(2018AI实践大赛--图片文字识别)第一名;仅采用densenet识别图中文字
455 stars 159 forks source link

IndexError: tuple index out of range #19

Closed SeventhBlue closed 4 years ago

SeventhBlue commented 4 years ago

您好,我是在window7运行该工程的。运行环境是是torch1.0.0,最后改成可以训练时,出现如题所示的错误。错误如下: `best_f1score 0

1 train-1 0%| | 0/596 [00:00<?, ?it/s]T raceback (most recent call last): File "main.py", line 864, in if name == 'main': File "main.py", line 831, in main

File "main.py", line 494, in train_eval images, labels = [Variable() for x in data[1:3]] File "main.py", line 471, in get_weight label_true = (labels>0.5).sum(0) IndexError: tuple index out of range 0%| | 0/596 [00:16<?, ?it/s]

在get_weight函数中我是没有动的,如下: def get_weight(labels): labels = labels.data.cpu().numpy() weights = np.zeros_like(labels)

weight_false = 1.0 / ((labels<0.5).sum() + 10e-20)

# weight_true  = 1.0 / ((labels>0.5).sum() + 10e-20)
weight_false = 1.0 / ((labels<0.5).sum(0) + 10e-20)
label_true = (labels>0.5).sum(0)
for i in range(labels.shape[1]):
    label_i = labels[:,i]
    weight_i = np.ones(labels.shape[0]) * weight_false[i]
    # weight_i = np.ones(labels.shape[0]) * weight_false
    if label_true[i] > 0:
        weight_i[label_i>0.5] = 1.0 / label_true[i]
    weights[:,i] = weight_i
weights *= np.ones_like(labels).sum() / (weights.sum() + 10e-20)
weights[labels<-0.5] = 0
return weights`

给为大佬能给点提示吗?或者大概说一下这个函数的具体作用,labels的数据类型是啥?

yinchangchang commented 4 years ago

建议使用Ubuntu,Windows会有各种错误

yinchangchang commented 4 years ago

get_weight 给loss加权使用的,对于每一个字来说,label都是极度不平衡的,所有需要加权

SeventhBlue commented 4 years ago

哇,感谢作者的答复。 已经感受到各种错误了[捂脸]