fluid 如何获取特定层的参数

  • 问题描述:在训练好一个模型之后,想打印模型的参数类似TF里面,w = session.run([fc1.W])
    然后直接获取到了第一层FClayer的W矩阵,fluid有类似的接口吗?

  • 报错输出:

Traceback (most recent call last):
  File "test.py", line 12, in <module>
    ret = scope.find_var("target_fc").get_tensor()
AttributeError: 'NoneType' object has no attribute 'get_tensor'
  • 问题复现:
import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
x = fluid.layers.data(name='x', shape=[5], dtype='float32'),                          
param_attr = ParamAttr(name='target_fc')
bias_attr = ParamAttr(name='target_fc_b')
fc1 = fluid.layers.fc(input=x, size=128, act='relu', param_attr=param_attr, bias_attr=bias_attr)
scope = fluid.executor.global_scope()

# get tensor
ret = scope.find_var("target_fc").get_tensor()
print(ret)            
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())
  • 问题分析:

在PaddlePaddle中,program程序没有运行是,数据是不会进行初始化的,所以要将获得数据的操作diam放在运行逻辑之后,具体而言就是将ret = scope.find_var("target_fc").get_tensor()移动到exe.run(fluid.default_startup_program())之后

  • 解决方法:
import paddle.fluid as fluid
from paddle.fluid.param_attr import ParamAttr
x = fluid.layers.data(name='x', shape=[5], dtype='float32'),                          
param_attr = ParamAttr(name='target_fc')
bias_attr = ParamAttr(name='target_fc_b')
fc1 = fluid.layers.fc(input=x, size=128, act='relu', param_attr=param_attr, bias_attr=bias_attr)

# get tensor
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())
ret = fluid.global_scope().find_var("target_fc").get_tensor()
import numpy as np
ret = np.array(ret)
print (ret.shape)
print(ret)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值