如何在 keras 中使用 LeakyRelu 作为序列 DNN 中的激活函数?什么时候比 Relu 表现更好?

数据挖掘 Python 深度学习 喀拉斯 张量流 激活函数
2021-10-10 22:22:21

如何在 keras 中使用 LeakyRelu 作为序列 DNN 中的激活函数?如果我想写类似的东西:

 model = Sequential()
    model.add(Dense(90, activation='LeakyRelu'))

解决办法是什么?把LeakyRelu类似于Relu?

第二个问题是:调整 LeakyRelu 参数的最佳通用设置是什么?什么时候它的性能明显优于 Relu?

4个回答

您可以像在 python 类中一样使用 LeakyRelu,而不是像在示例中那样仅指定字符串名称。它的工作原理与普通图层类似。

导入 LeakyReLU 并实例化模型

from keras.layers import LeakyReLU
model = Sequential()

# here change your line to leave out an activation 
model.add(Dense(90))

# now add a ReLU layer explicitly:
model.add(LeakyReLU(alpha=0.05))

activation='relu'由于在源代码中创建了简单的别名,因此能够简单地编写 eg成为可能。


对于你的第二个问题:

调整 LeakyRelu 参数的最佳常规设置是什么?而当它的性能明显优于 Relu 时呢?

恐怕我无法为您提供 LeakyReLU 的最佳设置 - 它们将取决于模型/数据。

ReLU 和 LeakyReLU 之间的区别在于后者能够保留一定程度流入其中的负值,而前者只是将所有小于 0 的值设置为 0。理论上,这种扩展的输出范围提供了使用它的模型的灵活性略高。我敢肯定,发明者认为它很有用,并且也许证明了一些基准测试的情况。然而,在实践中,人们通常只坚持使用 ReLU,因为 LeakyReLU 的好处并不一致,而且 ReLU 的计算成本更低,因此模型的训练速度稍快。

只是添加另一个解决方案。
你也可以写类似

import tensorflow as tf
keras = tf.keras  

layer1 = keras.layers.Dense(units=90, activation=keras.layers.LeakyReLU(alpha=0.01))
model = keras.Sequential([layer1])

或者

model= keras.Sequential([                                 
          keras.layers.Dense(units=90, 
              activation=keras.layers.LeakyReLU(alpha=0.01))                         
])

但是,通过层的“激活”参数传递“高级激活”层不是一个好的做法,最好避免。更多请参考官方文档 -
层激活函数

我相信问题是关于在 Keras功能 API中使用 LeayReLU 。看起来像这样:

from keras.layers import LeakyReLU
...
x = Dense(128)(x)
x = LeakyReLU(alpha=0.3)(x)

```

当单元不活动(负)时,LeakyRelu 允许小梯度:

f(x)=alphaxforx<0,
f(x)=xforx>=0.