1. 激活函数的使用
-
激活函数可以通过设置单独的激活层实现,也可以在构造层对象时通过传递
activation
参数实现from keras.layers import Activation, Dense model.add(Dense(64)) model.add(Activation('tanh')) # 等价于 model.add(Dense(64, activation='tanh')) # 你也可以通过传递一个【逐元素运算】的Theano/TensorFlow/CNTK函数来作为激活函数: from keras import backend as K model.add(Dense(64, activation=K.tanh)) model.add(Activation(K.tanh))
2. keras支持的激活函数
- softmax
- elu (指数线性单元)
- selu (可伸缩的指数线性单元)
- SELU 等同于:
scale * elu(x, alpha)
,其中 alpha 和 scale 是预定义的常量。只要正确初始化权重(参见lecun_normal
初始化方法)并且输入的数量「足够大」(参见Self-Normalizing Neural Networks),选择合适的 alpha 和 scale 的值,就可以在两个连续层之间保留输入的均值和方差。(即可以保证activation value稳定传播,有点后来的BN的作用)
- SELU 等同于:
- softplus (
log(exp(x) + 1)
) - softsign (
x / (abs(x) + 1)
) - relu (cs231n推荐)
- 线性修正单元激活:如果
x > 0
,返回值为x
;如果x < 0
,返回值为alpha * x
。alpha:负数部分的斜率,默认为 0。如果定义了 max_value,则结果将截断为此值。
- 线性修正单元激活:如果
- tanh
- sigmoid
- hard_sigmoid
- 计算速度比 sigmoid 激活函数更快。如果
x < -2.5
,返回 0。如果x > 2.5
,返回 1。如果-2.5 <= x <= 2.5
,返回0.2 * x + 0.5
。
- 计算速度比 sigmoid 激活函数更快。如果
- linear (线性激活函数,即不做任何改变)
- 对于Theano/TensorFlow/CNTK不能表达的复杂激活函数,如含有可学习参数的激活函数,可通过高级激活函数实现,可以在
keras.layers.advanced_activations
模块中找到。 这些高级激活函数包括PReLU
和LeakyReLU