各种激活函数的计算公式、图像以及实现代码

news2025/3/1 11:43:09

         激活函数已经成为神经网络中非常重要的一部分,随着各种类型的神经网络模型被人们开发出来,各种激活函数也应运而生,在不同的场景中,取得良好的效果。本文跟据著名的YOLO系列目标检测模型的源码 AlexeyAB Darknet,整理出目前神经网络模型中应用最广泛的20种激活函数,对它们的计算公式、图像特点进行介绍,并使用python代码实现这些激活函数的计算。

1、stair激活函数

        如图1所示,stair激活函数的图像就像阶梯一样。它的计算公式如下:

stair(x)=\left\{\begin{matrix} \left \lfloor x/2 \right \rfloor& (mod(\left \lfloor x \right \rfloor,2)=0)\\ (x+\left \lfloor x \right \rfloor)+\left \lfloor x/2 \right \rfloor&(mod(\left \lfloor x \right \rfloor,2)\neq 0) \end{matrix}\right.

式子中,\left \lfloor x \right \rfloor表示不大于x的整数,mod\left ( \left \lfloor x \right \rfloor,2 \right )表示对2取余数。 

图1 stair激活函数

 代码实现如下:


def stair(x):
    n=math.floor(x)
    if n%2==0:
        return math.floor(x/2.0)
    else:
        return (x-n)+math.floor(x/2.0)

2、hardtan激活函数

        如图2所示,hardtan激活函数是通过以直代曲近似实现tan函数,其计算公式如下:

hardtan(x)=\left\{\begin{matrix} -1.0 &(x<-1.0) \\ 1.0 &(x>1.0) \\ x & (other)\end{matrix}\right.

图2 hardtan激活函数

代码实现如下:

def hardtan(x):
    if x<-1.0:
        return -1.0
    elif x>1.0:
        return 1.0
    else:
        return x

3、linear激活函数

        linear激活函数是线性激活函数,输入x输出也是x,其函数图像如图3所示。

图3 线性激活函数

 代码实现:

def linear(x):
    return x

4、logistic激活函数

        logistic激活函数又叫sigmoid激活函数,如图4所示,logistic函数可以结果映射到0到1之间。其计算公式如下:

logistic(x)=\frac{1.0}{1.0+e^{-x}}

图4 logistic激活函数

 代码实现如下:

def logistic(x):
    return 1.0/(1.0+math.exp(-x))

5、loggy激活函数

        如图5所示,loggy的函数图像跟logistic有点相似,也是把输出映射到0到1之间。其计算公式如下:

loggy(x)=\frac{2.0}{1+e^{-x}}-1

图5 loggy激活函数

 代码实现:

def loggy(x):
    return 2.0/(1.0+math.exp(-x))-1.0

6、relu激活函数

        relu激活函数为线性整流函数,目的是把小于0的数截取掉,其函数图像如图6所示,其计算公式如下:

relu(x)=\left\{\begin{matrix} 0 & (x<0)\\ x & (x\geqslant 0) \end{matrix}\right.

图6 relu激活函数

 代码实现如下:

def relu(x):
    return x*(x>0)

7、relu6激活函数

        relu6和relu一样,也是线性整流函数,不同的是他对大于6的数进行了截断,其函数图像如图7所示,其计算公式如下:

relu6(x)=\left\{\begin{matrix} 0.0 & (x<0)\\ 6.0& (x>6)\\ x& (0\leq x\leq 6) \end{matrix}\right.

图7 relu6激活函数

 代码实现如下:

def relu6(x):
    if x<0:
        return 0.0
    elif x>6:
        return 6.0
    else:
        return x

8、elu激活函数

        elu激活函数的图像如图8所示,其计算公式如下:

elu(x)=\left\{\begin{matrix} x & (x\geq 0)\\ e^{x}& (x<0) \end{matrix}\right.

图8 elu激活函数

 代码实现:

def elu(x):
    return (x>=0)*x+(x<0)*(math.exp(x)-1.0)

9、selu激活函数

        selu激活函数如图9所示,其计算公式如下:

selu(x)=\left\{\begin{matrix} 1.0507*x& (x\geq 0)\\ 1.0507* 1.6732* (e^{x}-1.0)& (x<0) \end{matrix}\right.

图9 selu激活函数

 代码实现:                                                                                                                                        

def selu(x):
    return (x>=0)*1.0507*x+(x<0)*1.0507*1.6732*(math.exp(x)-1.0)

10、relie激活函数

                相比于relu激活函数,relie激活函数对于小于零的数据并不会直接截取为0,二是乘以一个小的系数,这个系数为0.01。其函数图像如图10所示,其计算公式如下:

relie(x)=\left\{\begin{matrix} 0.01*x & (x<0)\\ x& (x\geq 0) \end{matrix}\right.

图10 relie激活函数

 代码实现:

def relie(x):
    if x>0:
        return x
    else:
        return 0.01*x

11、ramp激活函数

        如图11所示为ramp激活函数,其计算公式如下:

ramp(x)=\left\{\begin{matrix} x+0.1* x & (x>0)\\ 0.1*x& (x\leq 0) \end{matrix}\right.

图11 ramp激活函数

代码实现:

def ramp(x):
    return x*(x>0)+0.1*x

12、leaky激活函数

        如图12所示为leaky激活函数的图像,它与relie函数有点像,它的斜率系数要比relie激活函数要大,其计算公式如下:

leaky(x)=\left\{\begin{matrix} x & (x\geq 0)\\ 0.1* x& (x<0) \end{matrix}\right.

图12 leaky激活函数

 代码实现如下:

def leaky(x):
    if x<0:
        return 0.1*x
    else:
        return x

13、tanh激活函数

        tanh激活函数的图像如图13所示,它的取值范围是[-1,1],其计算公式如下:

tanh(x)=\frac{2.0}{1.0+e^{-2* x}}-1

图13 tanh激活函数

 代码实现:

def tanh(x):
    return 2.0/(1.0+math.exp(-2.0*x))-1.0

14、gelu激活函数

        gelu激活函数的图像如图14所示,其计算公式如下:

gelu(x)=0.5* x(1.0+tanh(0.797885*x+0.035677*x^{3.0}))

式中,tanh为上文提到过的激活函数。

图14 gelu激活函数

代码实现如下:

def gelu(x):
    return 0.5*x*(1.0+math.tanh(0.797885*x+0.035677*math.pow(x,3.0)))

15、softplus激活函数

        softplus激活函数的图像如图15所示,其计算公式如下:

softplus(x,threshold)=\left\{\begin{matrix} x& (x>threshold)\\ e^{x}& (x<-threshold) \end{matrix}\right.

图15 softplus激活函数

 代码实现:

def softplus(x,threshold):
    if x>threshold:
        return x
    elif x<-threshold:
        return math.exp(x)
    else:
        return math.log(math.exp(x)+1.0)

 16、plse激活函数

        图16位plse激活函数的图像,其计算公式如下:

plse(x)=\left\{\begin{matrix} 0.01*(x+4.0) &(x<-4) \\ 0.01*(x-4.0)+1.0&(x>4) \\ 0.125*x+0.5& (-4\leq x\leq 4) \end{matrix}\right.

图16 plse激活函数

 代码实现:

def plse(x):
    if x<-4:
        return 0.01*(x+4.0)
    elif x>4:
        return 0.01*(x-4.0)+1.0
    else:
        return 0.125*x+0.5

17、lhtan激活函数

        图17是lhtan激活函数的图像,其计算公式为:

lhtan(x)=\left\{\begin{matrix} 0.001*x & (x<0)\\ 0.001*(x-1.0)+1.0&(x>1) \\ x& (0\leq x\leq 1) \end{matrix}\right.

图17 lhtan激活函数

 

代码实现:

def lhtan(x):
    if x<0:
        return 0.001*x
    elif x>1:
        return 0.001*(x-1.0)+1.0
    else:
        return x

18、swish激活函数

        图18是swish激活函数的图像,其计算公式如下:

swish(x)=x*logistic(x)

式中,logistic为上文所提到的激活函数,也叫sigmoid激活函数。

图18 swish激活函数

 代码实现:

def logistic(x):
    return 1.0/(1.0+math.exp(-x))

def swish(x):
    return x*logistic(x)

19、mish激活函数

        mish激活函数的图像如图19所示,其计算公式如下:

mish(x)=x*tanh(softplus(x,20.0))

式中tanh,softplus均为上文描述过的激活函数。

图19 mish激活函数

 代码实现如下:

def softplus(x,threshold):
    if x>threshold:
        return x
    elif x<-threshold:
        return math.exp(x)
    else:
        return math.log(math.exp(x)+1.0)

def tanh(x):
    return 2.0/(1.0+math.exp(-2.0*x))-1.0

def mish(x):
    return x*tanh(softplus(x,20.0))

20、hardmish激活函数

        hardmish激活函数为mish激活函数的近似形式,它的图像如图20所示,其计算公式如下:

hardmish(x)=\left\{\begin{matrix} x & (x>0)\\ x*x*0.5+x&(-2< x\leq 0) \\ 0& (x\leq -2) \end{matrix}\right.

图20 hardmish激活函数

 代码实现:

def hardmish(x):
    if x>0:
        return x
    elif x>-2:
        return x*x*0.5+x
    else:
        return 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396844.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML第5天 HTML新标签与特性

新标签与特性文档类型设定前端复习帮手W3Schoool常用新标签datalist标签&#xff0c;与input元素配合&#xff0c;定义选项列表fieldset元素新增input表单文档类型设定 document – HTML: 开发环境输入html:4s – XHTML: 开发环境输入html:xt – HTML5: 开发环境输入html:5 前…

如何在知行之桥EDI系统中定时自动更换交易伙伴AS2证书?

为了保证客户与交易伙伴之间数据传输的安全性&#xff0c;AS2传输协议中&#xff0c;通常会通过一对数字证书对传输数据进行签名和加密。但是证书是有有效期的&#xff0c;在证书到期之前&#xff0c;需要贸易双方及时更换新的证书。 在更新证书时&#xff0c;由于客户通常是和…

第十六节 接口

接口 接口是一种规范。规范也是一种公开的。 接口中的成分特点&#xff1a;JDK8之前接口中只能有抽象方法和常量。 接口的用法&#xff1a; ●接口是用来被类实现(implements)的&#xff0c;实现接口的类称为实现类。实现类可以理解成所谓的子类。 从上面可以看出&#xff0c…

网络的瓶颈效应

python从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129328397?spm1001.2014.3001.5501 ❤ 网络的瓶颈效应 网络瓶颈&#xff0c;指的是影响网络传输性能及稳定性的一些相关因素&#xff0c;如网络拓扑结构&#xff0c;网线&#xff0…

了解栈Stack一篇文章就够了

什么是栈栈是一种特殊的线性表&#xff0c;只允许一端进行数据的插入和删除&#xff0c;即先进后出原则。类似于弹夹先装进去的子弹后面出&#xff0c;后放入的子弹先出。栈的底层原理栈是一种线性结构&#xff0c;所以既能使用数组实现&#xff0c;也能使用链表实现&#xff0…

【蓝桥杯刷题训练营】day05

1 数的分解 拆分成3个数相加得到该数 然后采用了一种巨愚蠢的办法&#xff1a; int main() {int count 0;int a 2;int b 0;int c 1;int d 9;int a1, a2, a3;int c1, c2, c3;int d1, d2, d3;for (a1 0; a1 < 2; a1){for (a2 0; a2 < 2; a2){for (a3 0; a3 <…

中断和事件

目录 中断概述 什么是中断&#xff1f; 什么是EXTI&#xff1f; EXTI初始化结构体&#xff1a; 中断/事件线&#xff1a; EXTI模式&#xff1a; 触发类型&#xff1a; EXTI控制&#xff1a; 什么是优先级&#xff1f; 什么是优先级分组&#xff1f; 什么是NVIC&#…

【Java】最新版本SpringCloudStream整合RocketMQ实现单项目中事件的发布与监听

文章目录前言依赖配置代码参考前言 SpringCloud项目中整合RocketMQ是为了削峰填谷。 这里我使用RocketMQ的作用用于接收项目中产生的消息&#xff0c;然后异步的发送邮件给客户&#xff0c;这是这个项目的产生的背景。 依赖配置 <dependencies><dependency><…

开发钉钉微应用,实现免登+调试

1.创建h5微应用 https://open.dingtalk.com/document/orgapp/develop-org-h5-micro-applications 根据里面的三个步骤,创建h5微应用 2.免登之前必须要先进行JSAPI的授权 文档说明: https://open.dingtalk.com/document/orgapp/jsapi-authentication 根据文档中的说明 步骤…

spring事物源码分析

今天的任务是剖析源码&#xff0c;看看Spring 是怎么运行事务的&#xff0c;并且是基于当前最流行的SpringBoot。还有&#xff0c;我们之前剖析Mybatis 的时候&#xff0c;也知道&#xff0c;Mybatis 也有事务&#xff0c;那么&#xff0c;他俩融合之后&#xff0c;事务是交给谁…

MySQL (六)------MySQL的常用函数、 事务(TCL)、DCL用户操作语句、常见环境、编码问题

第一章 MySQL的常用函数 1.1 字符串函数 1.1.1 字符串函数列表概览 函数用法CONCAT(S1,S2,......,Sn)连接S1,S2,......,Sn为一个字符串CONCAT_WS(separator, S1,S2,......,Sn)连接S1一直到Sn&#xff0c;并且中间以separator作为分隔符CHAR_LENGTH(s)返回字符串s的字符数LENGTH…

深入理解性能压测工具原理

如果没有性能测试工具如何通过手工实现 如果没有性能测试工具&#xff0c;通过手工进行性能测试&#xff0c;这是一个值得我们思考的问题。这时候需要一个协调员发送指令&#xff0c;一个操作员进行操作&#xff0c;对系统施加压力&#xff0c;多个操作员代表着多个用户进行并…

面向对象设计模式:创建型模式之原型模式

文章目录一、引入二、代理模式&#xff0c;Prototype Pattern2.1 Intent 意图2.2 Applicability 适用性2.3 类图2.4 应用实例&#xff1a;使用下划线或消息框展示字符串2.4 应用实例&#xff1a;JDK java.lang.Object java.lang.Cloneable一、引入 二、代理模式&#xff0c;Pr…

Python—看我分析下已经退市的 可转债 都有什么特点

分析 需求分析 可转债退市原因的种类与占比是多少 强赎与非强赎导致的退市可转债 存续时间 维度占比 强赎与非强赎导致的退市可转债 发行资金 规模占比 强赎与非强赎导致的退市可转债 各个评级 的占比 强赎与非强赎导致的退市可转债 各个行业&#xff08;一级行业&#xf…

互相关延时估计 Matlab仿真

文章目录互相关延时估计什么是互相关延时估计&#xff1f;原理代码实现总结互相关延时估计 互相关延时估计是一种信号处理技术&#xff0c;用于计算两个信号之间的时间延迟。在本篇博客中&#xff0c;我们将使用MATLAB来实现互相关延时估计&#xff0c;并提供多个例子和代码&a…

TypeScript深度剖析: TypeScript 中函数的理解?与 JavaScript 函数的区别?

一、是什么 函数是 JavaScript 应用程序的基础&#xff0c;帮助我们实现抽象层、模拟类、信息隐藏和模块 在 TypeScript 里&#xff0c;虽然已经支持类、命名空间和模块&#xff0c;但函数仍然是主要定义行为的方式&#xff0c;TypeScript 为 JavaScript 函数添加了额外的功能…

English Learning - L2-5 英音地道语音语调 弹力双元音 [ɪə] [ʊə] [eə] 2023.03.6 周一

English Learning - L2-5 英音地道语音语调 弹力双元音 [ɪə] [ʊə] [eə] 2023.03.6 周一朗读节奏元音的长度元音发音在清辅音和浊辅音前的区别元音发音跟后面浊辅音节数的区别元音在重读音节中复习大小元音发音对比/ʌ/ 舌中音/ɒ/ 舌后音/ʊ/ 舌后音/ɪ/ 舌前音[ɑ:] VS […

Jenkins+Docker自动化部署项目

看到了一篇文章&#xff0c;实操一下自动部署的感觉。参看地址&#xff1a;原文 首先更新docker&#xff0c;我更新到了 [rootlocalhost springboot]# docker --version Docker version 23.0.1, build a5ee5b1跟新步骤&#xff1a; yum update#卸载旧版本 yum remove dock…

Nginx支持quic协议

第一种方式&#xff1a;Nginx官方nginx-quic搭建 通过部署Nginx官方的QUIC分支来实现的浏览器和nginx-quic服务器粗略的HTTP3通信。 1、下载BoringSSL BoringSSL 是由谷歌开发,从 OpenSSL 中分离的一个分支。BoringSSL 是 Chrome/Chromium、Android&#xff08;但它不是 NDK 的…

Spark Yarn 运行环境搭建

文章目录Spark Yarn 运行环境搭建1、解压缩文件2、修改配置环境文件3、配置历史服务器Spark Yarn 运行环境搭建 1、解压缩文件 将spark3.2.3的压缩包上传到 linux /opt/software 目录下 输入命令&#xff1a; tar -zxvf spark-3.2.3-bin-hadoop3.2-scala2.13.tgz -C /opt/ 解…