mindspore中nn.TransformerEncoder中参数num_layers出现失效问题
收藏回复举报
mindspore中nn.TransformerEncoder中参数num_layers出现失效问题
t('forum.solved') 已解决
新人帖
发表于2024-03-21 12:27:35
0 查看

首先我的任务是将一个训练好的torch模型与权重文件(.pth)转换为mindspore框架,并基于mindspore框架进行推理


但是我在将模型以及权重文件转换之后进行load时发现mindspore框架下的模型少load了很多参数,具体来说,就是我的torch框架下的模型有四百多个可以load的参数权重矩阵,但一模一样转为mindspore之后只有三百多个可load的参数矩阵,最后我将模型参数通过 params_dict = model.parameters_dict() 打印出来,如下:

%E6%88%AA%E5%9B%BE%202024-03-21%2012-07-53.png
cke_19281.png

发现我定义的num_layers=4的transformer_encoder只加载了一层,其他三层不见了!然后我将num_layers的值改为其他值,发现仍然只能加载一层,num_layers这个参数好像失效了

排除可能错误:

1、首先排除mindspore模型参数没有读完以及参数名有误的可能性,因为我param_not_load 打出来是空的[]
%E6%88%AA%E5%9B%BE%202024-03-21%2012-14-52.png

2、transformer的encoder_layers和self.transformer_encoder搭建正确,是按照文档的对照着改的(写法和torch没什么区别)

3、权重文件从torch转为mindspore的时候参数命名与修改没有问题,因为mindspore下所有参数都是成功加载的,只是莫名其妙少了三层的encoder_layer,也就是说权重文件.ckpt中的其他三层transformer_encoder参数权重空闲了,没有地方可以加载它们

请问这是什么问题?

我要发帖子