如上图所示为使用Ubuntu GPU服务器训练文本分类模型时发生的错误,单纯看最后的错误很难看出错误来源,但我们注意到错误中提示了loss.backward()发生了问题,也就是loss计算的错误。
这种问题大部分是标签定义的问题,可以看到在程序中第七行我定义了一个class_dict的一个字典,用于存储类别对应的id,刚刚说到了这种问题大部分是标签定义的问题,观察一下我定义的标签,是由 1 ~ 7,起初认为这种定义没有问题,但大家需要注意的是 模型输出后是根据argmax计算哪一个位置的值是最大的,从而返回这个位置的索引,换句话说,计算loss时也是这种方法。
因此索引是由0开始的,而真实的数据标签中并没有定义 0 这个标签,导致无法计算loss,从而产生错误,将类别对应的 id 转换为 0 ~ 6 即可解决问题。
总结: RuntimeError: cuda runtime error (59) : device-side assert triggered at XXX 错误提示loss无法反传,大部分是标签定义的问题,将标签起始值转换为由 0 开始的连续标签值即可。