Paddle [论文复现][已解决]leaky_relu等激活函数如何作为Sequential模型的一部分

edqdpe6u  于 2022-04-21  发布在  Java
关注(0)|答案(1)|浏览(162)

paddle中的激活函数虽然可以单独使用,但是在forword函数里头;如果想定义在网络结构里,可以使用lambda或partial函数假装实现。但是,在Sequential模型中无法作为sublayer加入。

fluid.dygraph.Sequential(fluid.dygraph.InstanceNorm(10), 
                                           nn.Conv2D(10, 3, 1, 1, 0))

这个OK。

fluid.dygraph.Sequential(fluid.dygraph.InstanceNorm(10), 
                                           functools.partial(fluid.layers.leaky_relu, alpha=0.2), 
                                           nn.Conv2D(10, 3, 1, 1, 0))

这个报 assert isinstance(sublayer, core.Layer)

fluid.dygraph.Sequential(fluid.dygraph.InstanceNorm(10), 
                                           fluid.layers.leaky_relu(), 
                                           nn.Conv2D(10, 3, 1, 1, 0))

这个报 leaky_relu() missing 1 required positional argument: 'x'

ibps3vxo

ibps3vxo1#

刚在微信群得到大佬指点,自己答一个:

class leaky_relu(fluid.Layer):
    def __init__(self, alpha=0.2):
        super().__init__()
        self.leaky_relu = lambda x: fluid.layers.leaky_relu(x, alpha=alpha)

    def forward(self, x):
        return self.leaky_relu(x)

相关问题