当搭建神经网络时候,遇到PaddlePaddle中没有集成的功能模块怎么办?
收藏
在PaddlePaddle中集成了类似Conv2D、Linear等子层,但是在深度学习实践中,遇到了PaddlePaddle中还没有集成的子层怎么办呢?
首先我们必须弄清楚PaddlePaddle中集成的子层的实质是什么。不同的子层实质上是不同的部分参数初始化及前向计算流程的封装。因此,遇到PaddlePaddle中维集成的子层,我们可以自己定义参数,并实现前向计算流程,封装成自己的子层。具体方法如下:
class LinearLayer(paddle.nn.Layer):
def __init__(self, input_features, output_features):
super(LinearLayer, self).__init__()
# 自定义参数
w = self.create_parameter(shape=[input_features, output_features])
b = self.create_parameter(shape=[output_features], is_bias=True)
self.add_parameter('w', w)
self.add_parameter('b', b)
def forward(self, x):
x = paddle.matmul(x, self.w)
x = x + self.b
return x
好的,讲完,新技能Got!
DeepGeGe
已解决
2#
回复于2021-12
再说一句,如果自己想要的功能模块,不是能够由PaddlePaddle中定义的加减乘除等操作组合而成的,那就得参考文档中的自定义算子了,不过这种情况很罕见,一般是上述情况较常见。
0
收藏
请登录后评论
再说一句,如果自己想要的功能模块,不是能够由PaddlePaddle中定义的加减乘除等操作组合而成的,那就得参考文档中的自定义算子了,不过这种情况很罕见,一般是上述情况较常见。
干得漂亮,自定义算子、自定义网络层