动态图模式中如何创建可学习的参数
军人的生活就是 发布于2021-04 浏览:331 回复:4
0
收藏

问题场景是这样的:我想要自己定义一个Layer,在这个Layer里定义我自己的算法。现在我想要定义一个可学习的权重矩阵weight,让它可以随神经网络运行进行梯度更新,假设矩阵大小为30 x 50,我该怎么做?

收藏
点赞
0
个赞
共4条回复 最后由189******30回复于2021-05
#5189******30回复于2021-05

可以使用 self.create_parameter 创建参数

0
#4189******30回复于2021-05

还可以参考下这个项目的写法:

https://aistudio.baidu.com/aistudio/projectdetail/1230944

0
#3ljjfordownload回复于2021-04

可能不用继承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

0
#2ljjfordownload回复于2021-04

我下载了源代码看看,感觉可以试试两种方式:

1. 创建 ParamBase 类型数据 (文档找不到,简直离谱)

2. 创建一个自定义Layer,继承自 paddle.fluid.dygraph.layers.Layer ,然后在__init__函数中调用 self.create_parameter 来创建可学习的参数 (文档也是没有的。。。我是paddle.nn.Linear的实现,在里面找到的)

现在的PaddlePaddle对动态图的支持还很不完善啊。。。。建议自己下载源代码研究吧。

上面两种方法我还没有尝试,之后试出结果了再补一下更具体的答案

0
TOP
切换版块