Keras - 使用带参数的激活功能

时间:2017-06-02 13:33:47

标签: keras

如何在最新版本的keras中使用泄漏的ReLUs? 函数relu()接受一个可选参数'alpha',它负责负斜率,但我无法弄清楚如何在构造图层时传递参数。

这一行是我尝试的方式,

model.add(Activation(relu(alpha=0.1))

然后我收到错误

TypeError: relu() missing 1 required positional argument: 'x'

如何使用泄漏的ReLU或任何其他具有某些参数的激活功能?

3 个答案:

答案 0 :(得分:7)

relu是一个函数,而不是一个类,它将激活函数的输入作为参数x。激活层将函数作为参数,因此您可以通过输入x使用lambda函数对其进行初始化,例如:

model.add(Activation(lambda x: relu(x, alpha=0.1)))

答案 1 :(得分:0)

好吧,从这个来源(keras doc)和这个github question,您使用线性激活,然后将泄漏的relu作为另一个层放在后面。

from keras.layers.advanced_activations import LeakyReLU

model.add(Dense(512, 512, activation='linear')) # Add any layer, with the default of an identity/linear squashing function (no squashing)
model.add(LeakyReLU(alpha=.001))   # add an advanced activation

有帮助吗?

答案 2 :(得分:0)

您可以为参数化激活功能构建包装器。我发现这很有用且更直观。

class activation_wrapper(object):
    def __init__(self, func):
        self.func = func

    def __call__(self, *args, **kwargs):
        def _func(x):
            return self.func(x, *args, **kwargs)
        return _func

我当然可以在通话中使用lambda表达式。 然后

wrapped_relu = activation_wrapper(relu).

然后像上面一样使用它

model.add(Activation(wrapped_relu(alpha=0.1))

您也可以将其用作图层的一部分

model.add(Dense(64, activation=wrapped_relu(alpha=0.1))

尽管此解决方案比@Thomas Jungblut提供的解决方案稍微复杂一些,但可以将wrapper类用于任何参数化的激活函数。实际上,只要有一系列已被参数化的激活函数,我就使用它。