获取Pytorch中间某一层权重或者特征;state_dict()、named_parameters()
取参数:
g=model.named_parameters()
parm={}
for name,parameters in model.named_parameters():
print(name,':',parameters.size())
parm[name]=parameters.detach().numpy()
一些方法
- model.state_dict()和model.named_parameters()的不一样:
Pytorch中state_dict()、named_parameters()和parameters()的区别 - bert中,load参数函数中:state_dict是预训练的参数;model_state_dict是模型的参数(expected)。
why extra ?为什么有多余提示?
self.bert = BertModel(config, add_pooling_layer=False)
self.embeddings = self.bert.embeddings
self.encoder = self.bert.encoder
self.model.encoder.layer[-1].output.dense.bias
[-6.8667e-02, 1.1496e-02, 1.4397e-03, 2.4952e-02, -2.0034e-02,
model2.bert.encoder.layer[-1].output.dense.bias
[-6.8667e-02, 1.1496e-02, 1.4397e-03, 2.4952e-02, -2.0034e-02,
原来的设计是成立的,多出的参数设计为共享的,经过实验:确实是共享的,warning的提示是多余的。但是!这样没有必要,直接使用self.bert.embeddings来操纵bert的各个部件就可以了。根本不需要这样重命名。
它们并非被随机初始化,而是的确由预训练的参数加载。