如何在 keras 中使用 LeakyRelu 作为序列 DNN 中的激活函数?如果我想写类似的东西:
model = Sequential()
model.add(Dense(90, activation='LeakyRelu'))
解决办法是什么?把LeakyRelu类似于Relu?
第二个问题是:调整 LeakyRelu 参数的最佳通用设置是什么?什么时候它的性能明显优于 Relu?
如何在 keras 中使用 LeakyRelu 作为序列 DNN 中的激活函数?如果我想写类似的东西:
model = Sequential()
model.add(Dense(90, activation='LeakyRelu'))
解决办法是什么?把LeakyRelu类似于Relu?
第二个问题是:调整 LeakyRelu 参数的最佳通用设置是什么?什么时候它的性能明显优于 Relu?
您可以像在 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 允许小梯度: