-
问题描述:在训练好一个模型之后,想打印模型的参数类似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)