本文已参与「新人创作礼」活动,一起开启掘金创作之路
hsigmoid激活函数是对sigmoid的近似,用线性变换尽可能对sigmoid的非线性变化进行拟合。 sigmoid的图像如下所示:
通过对sigmoid图像的分析,可以发现其值域为【0,1】,中间[-3,3]的区域的斜率接近为1/6,小于-5的部分值接近为0,大于5的部分值接近为1。因此,可以对sigmoid进行近似拟合。拟合的公式如下:
相比于sigmoid的指数运算,hsigmoid的乘法运算可以节省大量的计算时间。
在代码实现中,基于relu函数实现,小于0置0,大于1置1。具体代码如下所示:
from keras.utils.generic_utils import get_custom_objects
tmp=0
def hsigmoid(x):
x=x/6+0.5
x=K.relu(x,max_value=1)*x/x
return x
get_custom_objects().update({'hsigmoid': layers.Activation(hsigmoid)})