chineseocr / trocr-chinese

transformers ocr for chinese
338 stars 53 forks source link

RuntimeError: CUDA error: device-side assert triggered! Solve!!! #43

Open fangshuiyun opened 11 months ago

fangshuiyun commented 11 months ago

出现这个问题是因为计算损失时,label超出模型输出的类别数造成的。 运行完python gen_vocab.py会生成自定义的vocab.txt(假如有100类),之后运行python init_custdata_model.py初始化模型等权重,确实将模型最后的分类层改成了100(自己print(model)看一下就知道了),初始化之后的vocab.json也确实是100类,但是tokenizer.json还是原来的11318类,所以在train.pyvocab = processor.tokenizer.get_vocab() 所获得的词表还是11318,那么自定义的词表中某个字符的标签就可能不是0-99,而是0-11317,做交叉熵损失时,模型输出100类,你的标签是1000,所以会发生错误! 解决方法:将生成好的cust-data/weights/vocab.json,替换weights/vocab.json,再重新跑一遍python init_custdata_model.py,得到正确的tokenizer.json文件!