深度学习7 hsigmoid硬件友好的激活函数实现

882 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

hsigmoid激活函数是对sigmoid的近似,用线性变换尽可能对sigmoid的非线性变化进行拟合。 sigmoid的图像如下所示:

image.png 通过对sigmoid图像的分析,可以发现其值域为【0,1】,中间[-3,3]的区域的斜率接近为1/6,小于-5的部分值接近为0,大于5的部分值接近为1。因此,可以对sigmoid进行近似拟合。拟合的公式如下:

17493211ceaa4fdcf9cd1119b7d524cb_20210417134050474.png

相比于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)})

3f8e2616b0af3bc0ca84c65c57ce3b9f_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2E0ODYyNTk=,size_16,color_FFFFFF,t_70.png