Keras-使用带参数的激活函数

Keras-使用带参数的激活函数,keras,Keras,如何在最新版本的keras中使用leaky ReLUs? 函数relu()接受一个可选参数'alpha',该参数负责负斜率,但我不知道在构造层时如何传递该参数 这句话就是我想做的 model.add(Activation(relu(alpha=0.1)) 但是我得到了错误 TypeError: relu() missing 1 required positional argument: 'x' 如何使用泄漏的ReLU或任何其他带有参数的激活函数?ReLU是一个函数而不是一个类,它将激活函数的

如何在最新版本的keras中使用leaky ReLUs? 函数relu()接受一个可选参数'alpha',该参数负责负斜率,但我不知道在构造层时如何传递该参数

这句话就是我想做的

model.add(Activation(relu(alpha=0.1))
但是我得到了错误

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

如何使用泄漏的ReLU或任何其他带有参数的激活函数?

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

model.add(Activation(lambda x: relu(x, alpha=0.1)))
好的,从这个源()开始,使用线性激活,然后将泄漏的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

这有帮助吗?

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

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表达式。 然后

然后像上面那样使用它

model.add(Activation(wrapped_relu(alpha=0.1))
也可以将其用作图层的一部分

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

虽然此解决方案比@Thomas Jungblut提供的解决方案稍微复杂一点,但包装器类可用于任何参数化激活函数。事实上,每当我有一系列参数化的激活函数时,我都会使用它。

不适合我<代码>值错误:未知激活函数:适用于我,可能是您的代码中的一个输入错误@RaphaelRoyer Rivard使用函数API该如何工作?例如,在
x=Dense(64,activation='relu')(x)
中更改relu的alpha参数不要忘记将lambda包装在lambda()函数中。否则,在尝试从文件加载保存的模型时,load_model函数将中断<代码>从tensorflow.keras.layers导入Lambda;model.add(激活(Lambda(Lambda x:relu(x,alpha=0.1)))这确实回答了“如何使用泄漏的relu?”,但没有回答一般问题“或任何其他带有某些参数的激活函数?”。事实上,如果必须为每个激活功能创建一个特殊的层,那将是令人失望的。该层是致密的,激活功能是该层的一部分。看看你可以看到Keras提供了OP想要的东西,问题是他们不清楚如何使用它。
model.add(Dense(64, activation=wrapped_relu(alpha=0.1))