用x2paddle将pytorch 的权重参数文件转换为paddle下的权重参数文件时,权重参数文件中的网路层的名字被强制更改
D-DanielYang opened this issue · comments
DanielYang commented
问题描述
- 用x2paddle将pytorch 的权重参数文件转换为paddle下的权重参数文件时,权重参数文件中的网路层的名字被强制更改。
- 错误截图
1、pytorch下网络结构的定义为:
共六层,分别为conv1至cnv6
2、使用x2paddle命令,转换为paddle下的权重文件
x2paddle --framework=onnx --model=onnx_model.onnx --save_dir=pd_model
3、使用paddle.load()函数,加载转换后的model.pdparams
报错
4、调试发现,model.pdparams的键值为conv0至conv5
原本定义好的各个网络层名字被强制更改。导致键值不匹配。
具体信息
另外:paddle的模型,张量如何开启半精度模式?
即pytorch里面的model.half()、tensor.half()
Jason commented
Hi, 这里关于权重参数名不同的问题,原因如下
- 不管是Paddle/PyTorch,对于权重的命名都是由框架来定义的,往往是框架中有一个变量名计数器,以此来命名不同的权重变量
- 在模型转换中,可能OP会发生顺序变化,例如在PyTorch中被定义在第1的conv,由于没有被第2,第3行代码引用,所以有可能被转到Paddle后,就放到了第4行,这样原本是第1个conv,现在可能变成了第4个conv
基于上面两个因素,转换后权重名并不会保证命名与之前一致,只确认前向结果一致。