fluid 如何获取特定层的参数 ?
收藏
在训练好一个模型之后,想打印模型的参数类似TF里面,w = session.run([fc1.W])
然后直接获取到了第一层FClayer的W矩阵,fluid有类似的接口吗?
然后直接获取到了第一层FClayer的W矩阵,fluid有类似的接口吗?
0
收藏
请登录后评论
可以用
scope.find_var(name)
请问有具体的例子吗?
假定我要输出FC1的参数
import paddle.fluid as fluid
x = fluid.layers.data(name='x', shape=[5], dtype='float32'),
fc1 = fluid.layers.fc(input=x, size=128, act='relu')
place = fluid.CPUPlace()
exe = fluid.Executor(place)
exe.run(fluid.default_startup_program())
https://github.com/PaddlePaddle/Paddle/blob/develop/python/paddle/fluid/tests/unittests/test_beam_search_op.py#L49
参考这个例子,需要对fc的参数指定一个名字,然后用名字获取值
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())
错误提示
Traceback (most recent call last):
File "test.py", line 12, in
ret = scope.find_var("target_fc").get_tensor()
AttributeError:
'NoneType' object has no attribute 'get_tensor'
program还没run的时候,数据是没有初始化的
问题搞定~我补充一下完整的代码,谢谢解答:)
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)