问题场景是这样的:我想要自己定义一个Layer,在这个Layer里定义我自己的算法。现在我想要定义一个可学习的权重矩阵weight,让它可以随神经网络运行进行梯度更新,假设矩阵大小为30 x 50,我该怎么做?
收藏
点赞
0
个赞
请登录后评论
TOP
切换版块
可以使用 self.create_parameter 创建参数
还可以参考下这个项目的写法:
https://aistudio.baidu.com/aistudio/projectdetail/1230944
可能不用继承paddle.fluid.dygraph.layers.Layer,继承nn.Layer就行了,源代码,Linear层定义参数的代码大概是:
def __init__(self,
in_features,
out_features,
weight_attr=None,
bias_attr=None,
name=None):
super(Linear, self).__init__()
self._dtype = self._helper.get_default_dtype()
self._weight_attr = weight_attr
self._bias_attr = bias_attr
self.weight = self.create_parameter(
shape=[in_features, out_features],
attr=self._weight_attr,
dtype=self._dtype,
is_bias=False)
self.bias = self.create_parameter(
shape=[out_features],
attr=self._bias_attr,
dtype=self._dtype,
is_bias=True)
self.name = name
我下载了源代码看看,感觉可以试试两种方式:
1. 创建 ParamBase 类型数据 (文档找不到,简直离谱)
2. 创建一个自定义Layer,继承自 paddle.fluid.dygraph.layers.Layer ,然后在__init__函数中调用 self.create_parameter 来创建可学习的参数 (文档也是没有的。。。我是paddle.nn.Linear的实现,在里面找到的)
现在的PaddlePaddle对动态图的支持还很不完善啊。。。。建议自己下载源代码研究吧。
上面两种方法我还没有尝试,之后试出结果了再补一下更具体的答案