手动迁移 pytorch 权重 到 keras layer 的坑,以一层双向lstm为例

最近项目需要将之前训练好的pytorch 模型转成tensorflow版本,用keras 搭建了模型,想试着迁移权重,除了用onnx 直接转之外,更加精细的手动控制不同网络层的权重迁移。

下面以一个lstm 为例: 

在 tf keras 下, 其中LSTM 和 Bidirectional 从keras导入即可:

由于是双向,所以一共包含 ih,hh,bias, ih_r, hh_r, bias_r 六个参数

而在 pytorch 的lstm 中 bias 的定义被拆成了两部分,

但维数相同,所以导出时,必须要加和才正好与tf.keras.layers 中的lstm bias相对应(这里一定注意!)

创建一个 空列表 将权重矩阵 从 torch.tensor 转换为 numpy, 并且要取一次转置(这里一定注意!)

layers对象都有一个 接口 set_weights(),传入提取的参数列表即可。 

至此迁移 一个双向 lstm 层的 工作 就完成了。

 

 

 

 

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenxin0215

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值