如何将Huggingface BERT模型的嵌入层权重复制到同架构新模型中
你可以直接复用预训练模型的嵌入层整体状态字典加载到新模型中,不需要手动枚举所有嵌入层参数,具体实现如下:
import torch # 推荐方案:直接加载整个嵌入层的状态字典,自动匹配所有参数 untrained_model.bert.embeddings.load_state_dict(model.bert.embeddings.state_dict())
如果你需要自定义选择复用的嵌入层参数,也可以手动遍历参数逐个复制:
# 手动赋值方案,适合需要筛选部分嵌入层参数复用的场景 for param_name, param_value in model.bert.embeddings.named_parameters(): untrained_model.bert.embeddings.state_dict()[param_name].copy_(param_value.data)
你可以通过以下代码验证参数是否复制成功:
# 对比任意嵌入层参数是否完全一致,输出True即为复制成功 print(torch.equal( model.bert.embeddings.word_embeddings.weight, untrained_model.bert.embeddings.word_embeddings.weight ))
如果后续训练过程中不需要调整嵌入层权重,可以添加以下代码冻结嵌入层参数:
for param in untrained_model.bert.embeddings.parameters(): param.requires_grad = False
内容的提问来源于stack exchange,提问作者Russell Richie
相关产品推荐
相关产品推荐

