如何在最新版本的keras中使用泄漏的ReLUs? 函数relu()接受一个可选参数'alpha',它负责负斜率,但我无法弄清楚如何在构造图层时传递参数。
这一行是我尝试的方式,
model.add(Activation(relu(alpha=0.1))
然后我收到错误
TypeError: relu() missing 1 required positional argument: 'x'
如何使用泄漏的ReLU或任何其他具有某些参数的激活功能?
答案 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类用于任何参数化的激活函数。实际上,只要有一系列已被参数化的激活函数,我就使用它。