总所周知用nn.CrossEntropyLoss()
算损失的时候需要将input_data和label展开对齐,也就是必须符合:(N,C)和(N)
的格式,而在NER任务中最后往往输出的是:(batch_size,seq_len,class_num)
和(batch_size,seqlen)
,所以需要这两个view一下。我的代码是:
outputs = model(input_ids=input_ids)
ouputs=outputs.view(-1, num_classes) # (batch_size*seq_length, num_classes)
labels = labels.view(-1) # (batch_size*seq_length)
#print(outputs.shape, labels.shape, labels.dtype)
loss = criterion(outputs, labels)
根本看不出有什么不对劲。 但是debug总是显示这里维度不匹配,问了好几遍GPT,他也没看出来,直到一遍遍排查,我把GPT说的所有可能的错误都说了,又发给他看。
我噗呲一下笑出来—————气笑了。 人在无语的时候真的想笑,尤其搭配上GPT这个语气,他真的好像人一样