Closed wangjiannan98 closed 1 month ago
我最近在使用 TrOCR 做手写签名识别,自定义数据集中有些词不在 hand-write(中文手写) 预训练模型中。
这是在用预训练模型的参数来初始化新模型的参数,由于扩充词表了,新模型的参数比之前多,之前没有的参数肯定是没办法初始化到新模型的。这里的代码就是在处理这个问题。 而在训练的时候只会使用新模型,跟预训练模型不再有关系,新模型中的参数肯定都会被优化的。
这是在用预训练模型的参数来初始化新模型的参数,由于扩充词表了,新模型的参数比之前多,之前没有的参数肯定是没办法初始化到新模型的。这里的代码就是在处理这个问题。 而在训练的时候只会使用新模型,跟预训练模型不再有关系,新模型中的参数肯定都会被优化的。
懂了,也就是说在 pre_model_weigths = pre_model.state_dict() 的时候,pre_model_weigth 嵌入层已经是一个更新了新词表大小的初始化模型。
十分感谢老师的回答
老师,您好,请教一下,在 init_custdata_model.py 代码文件中,有如下权重初始化代码:
当 pre_model_weigths[key].shape != cust_model_weigths[key].shape时,cust_model_weigths[key] = wt[keep_tokens, :],也就是说当自定义词表的词不在预训练模型的词表中时,是不做更新的是不,那不在预训练词表中的词微调后是不是也就没有效果了。