首页 Paddle框架 帖子详情
如何将训练完成后隐藏层的权重W及偏置b输出
收藏
快速回复
Paddle框架 问答深度学习模型训练 4610 10
如何将训练完成后隐藏层的权重W及偏置b输出
收藏
快速回复
Paddle框架 问答深度学习模型训练 4610 10

在构建多层感知器模型后,对其进行训练完成后。如何将中间隐藏层的权重Weight偏置bias输出为numpy的array格式

例如:输入层有n个神经元,隐藏层m个神经元,它们之间的权重W应为 n×m 的矩阵,偏置b应为 1×m 的矩阵,如何将W、b以numpy的array格式取出?

刚接触paddlepaddle,请大神指点,如有描述不清之处,请多指正!谢谢!

0
收藏
回复
全部评论(10)
时间顺序
goJhou
#2 回复于2019-01

不需要输出吧。设计的网络层结构继续复用,直接从model文件导入。训练结束的时候可以把参数保存成model

0
回复
时雨_润物
#3 回复于2019-01

谢谢,但我需要把它拿出来。

在github也有人提问这个问题,无奈小白看不懂大神怎么解决,只说明了一个方向。https://github.com/PaddlePaddle/Paddle/issues/15149

再次表示感谢!

0
回复
时雨_润物
#4 回复于2019-01
goJhou #2
不需要输出吧。设计的网络层结构继续复用,直接从model文件导入。训练结束的时候可以把参数保存成model

谢谢,但我需要把它拿出来。

在github也有人提问这个问题,无奈小白看不懂大神怎么解决,只说明了一个方向。https://github.com/PaddlePaddle/Paddle/issues/15149

再次表示感谢!

0
回复
busyboxs
#5 回复于2019-01
谢谢,但我需要把它拿出来。 在github也有人提问这个问题,无奈小白看不懂大神怎么解决,只说明了一个方向。https://github.com/PaddlePaddle/Paddle/issues/15149 再次表示感谢!
展开

参考你给的链接里面的例子,可以这样写,这里以paddlepaddle线性预测的例子来说明。

定义fc层时,可以这样

y_predict = fluid.layers.fc(input=x, size=1, act=None, 
                            param_attr=fluid.ParamAttr(name='fc0_w'), 
                            bias_attr=fluid.ParamAttr(name='fc0_b'))

然后你可以这样获取

fc_w = fluid.global_scope().find_var('fc0_w').get_tensor()
print(np.array(fc_w).shape)
fc_b = fluid.global_scope().find_var('fc0_b').get_tensor()
print(np.array(fc_b).shape)
0
回复
busyboxs
#6 回复于2019-01

到初始化之后的代码

import paddle
import paddle.fluid as fluid
import numpy as np
import math
import sys
from __future__ import print_function


BATCH_SIZE = 20
train_reader = paddle.batch(
    paddle.reader.shuffle(paddle.dataset.uci_housing.train(), buf_size=500), 
    batch_size=BATCH_SIZE)

test_reader = paddle.batch(
    paddle.reader.shuffle(paddle.dataset.uci_housing.test(), buf_size=500), 
    batch_size=BATCH_SIZE)
    
scope = fluid.core.Scope()
x = fluid.layers.data(name='x', shape=[13], dtype='float32')
y = fluid.layers.data(name='y', shape=[1], dtype='float32')
y_predict = fluid.layers.fc(input=x, size=1, act=None, 
                            param_attr=fluid.ParamAttr(name='fc0_w'), 
                            bias_attr=fluid.ParamAttr(name='fc0_b'))

main_program = fluid.default_main_program()
startup_program = fluid.default_startup_program()

cost = fluid.layers.square_error_cost(input=y_predict, label=y)
ag_loss = fluid.layers.mean(cost)

sgd_optimizer = fluid.optimizer.SGD(learning_rate=0.001)
sgd_optimizer.minimize(ag_loss)

test_program = main_program.clone(for_test=True)

use_cuda = False
place = fluid.CUDAPlace(0) if use_cuda else fluid.CPUPlace()

exe = fluid.Executor(place=place)
exe.run(startup_program)

# 初始化之后就可以打印了,也可以在训练后打印
fc_w = fluid.global_scope().find_var('fc0_w').get_tensor()
print(np.array(fc_w).shape)
fc_b = fluid.global_scope().find_var('fc0_b').get_tensor()
print(np.array(fc_b).shape)
0
回复
goJhou
#7 回复于2019-01
谢谢,但我需要把它拿出来。 在github也有人提问这个问题,无奈小白看不懂大神怎么解决,只说明了一个方向。https://github.com/PaddlePaddle/Paddle/issues/15149 再次表示感谢!
展开

你看看上面这位的方法。

我paddle只属于过家家级

0
回复
时雨_润物
#8 回复于2019-01
参考你给的链接里面的例子,可以这样写,这里以paddlepaddle线性预测的例子来说明。 定义fc层时,可以这样 [代码] 然后你可以这样获取 [代码]

谢谢!我在看了github大神指导后,到了下面这步,就进行不下去了。

fc_w = fluid.global_scope().find_var('fc0_w').get_tensor()

原来直接使用np.array(fc_w)就可以直接得到了,非常感谢!

arr_fc_w = np.array(fc_w)
0
回复
时雨_润物
#9 回复于2019-01
goJhou #7
你看看上面这位的方法。 我paddle只属于过家家级

无论怎样,都是有帮助的,感谢您!

0
回复
goJhou
#10 回复于2019-01
无论怎样,都是有帮助的,感谢您!

客气了 社区大家庭欢迎常回来看看

0
回复
r
rose20135188
#11 回复于2019-01

多谢分享,

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户