记录一下这个折磨我致死,但只是一个小小小小问题的bug。
任务:用BERT预训练模型对THUCNews做一个14个类别的新闻分类。
模型:
def __init__(self, config):
super(Model, self).__init__()
self.bert = BertModel.from_pretrained(config.bert_path)
for param in self.bert.parameters():
param.requires_grad = True
self.fc = nn.Linear(config.hidden_size, config.num_classes)
数据集:
运行后报错:
RuntimeError: CUDA error: device-side assert triggered
CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging consider passing CUDA LAUNCH BLOCKING=1
pytorch/aten/src/ATen/native/cuda/Loss.cu:247:nli_ioss_forward_reduce_cuda_kernel_2d: block: [0,0,0], thread: [0,0,0] Assertion t >0 && t <n classes failed.
解决了!!!
查阅了很多解决方案,大概是说模型的输出的类别数与我数据集的类别数对不上,但我当时检查了我的数据集,就是14个类别,我的num_classes=14,直到最后才意识到,模型的14个类别output是0-13,而我的labels是1-14,最后更改了数据集就好了。