Open fangshuiyun opened 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.py中vocab = 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文件!
出现这个问题是因为计算损失时,label超出模型输出的类别数造成的。 运行完python gen_vocab.py会生成自定义的vocab.txt(假如有100类),之后运行python init_custdata_model.py初始化模型等权重,确实将模型最后的分类层改成了100(自己print(model)看一下就知道了),初始化之后的vocab.json也确实是100类,但是tokenizer.json还是原来的11318类,所以在train.py中vocab = 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文件!