fliud如何给指定的tensor赋值

  • 问题描述:现在想将tensorflow的权重转成fluid接口的权重,对应的tensor是否可以直接转换?在代码中,fliud如何给指定的tensor赋值?

  • 问题分析:所谓的权重,其本质就是一个矩阵,该矩阵在训练神经网络时获得,在TensorFlow中通常会将训练完的节点权重矩阵以文件的信息保存,因为tensorflow保存模型的文件格式与PaddlePaddle的存在差异,所以目前是无法直接将tensorFlow保存的模型文件直接导入。但理论上依旧可以将TensorFLow文件中的权重矩阵转到Fluid对应的接口上,需要手动操作。

  • 解决方法:

在Fluid中,可以手动的为tensor赋值,实例代码如下:

import paddle.fluid as fluid
import numpy as np

np_data = np.random.uniform(0.1, 1, [3, 512, 512])
a = fluid.global_scope().find_var('var_a').get_tensor()
a.set(np_data)

上述代码会获得网络结构中名为var_a的节点,然后手动为该接口对应的tensor赋值。

更多细节可以参考:
https://github.com/PaddlePaddle/Paddle/blob/038e2817f0208f8de3761854700ff01fc5c28362/python/paddle/fluid/tests/book/test_label_semantic_roles.py#L178-L182

  • 问题拓展:
    不只是TensorFlow中模型的节点的权重转为PaddlePaddle中模型节点的参数,对于任意框架,只要提供了手动设置节点参数值的方法都可以实现使用不同框架实现的模型的参数权重的转移,一个常规的思路就是先使用该模块对应的原框架将模型权重矩阵文件读入并通过numpy写成常规的numpy文件,在使用另外一个框架,如PaddlePaddle框架,将numpy文件读入,再使用相应的赋值方法将神经网络结构中节点的参数手动赋值,达到模型参数在不同框架间的转移。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值