一、为什么要用激励函数?

简单的说,我们日常中所遇到的问题大多数是非线性问题,很多不能用线性方程来概括,因此激励函数就出现了。举一个简单的例子,例如:

W就是我们需要求解的参数,Y是预测值,x是输入值,真很显然是一个线性方程,不能用来描述非线性的问题。这个时候激励函数就出现了,让我来解决这个问题!!!

图片来源: https://mofanpy.com/tutorials/machine-learning/torch/intro-activation-function/

图片来源: https://mofanpy.com/tutorials/machine-learning/torch/intro-activation-function/

这里的AF就是激励函数,套在原函数上,这样就使得原来的Wx结果被扭弯了。其实这个 AF,  它其实就是另外一个非线性函数. 比如说relu, sigmoid, tanh. 将这些掰弯利器嵌套在原有的结果之上, 强行把原有的线性结果给扭曲了. 使得输出结果 y 也有了非线性的特征. 举个例子, 比如我使用了 relu 这个掰弯利器, 如果此时 Wx 的结果是1, y 还将是1, 不过 Wx 为-1的时候, y 不再是-1, 而会是0.

你甚至可以创造自己的激励函数来处理自己的问题, 不过要确保的是这些激励函数必须是可以微分的, 因为在 backpropagation 误差反向传递的时候, 只有这些可微分的激励函数才能把误差传递回去.

二、常用激励函数的选择

想要恰当使用这些激励函数, 还是有窍门的. 比如当你的神经网络层只有两三层, 不是很多的时候, 对于隐藏层, 使用任意的激励函数, 随便掰弯是可以的, 不会有特别大的影响. 不过, 当你使用特别多层的神经网络, 在掰弯的时候, 玩玩不得随意选择利器. 因为这会涉及到梯度爆炸, 梯度消失的问题. 

最后我们说说, 在具体的例子中, 我们默认首选的激励函数是哪些. 在少量层结构中, 我们可以尝试很多种不同的激励函数. 在卷积神经网络 Convolutional neural networks 的卷积层中, 推荐的激励函数是 relu. 在循环神经网络中 recurrent neural networks, 推荐的是 tanh 或者是 relu .

图片来源: https://mofanpy.com/tutorials/machine-learning/torch/intro-activation-function/

三、代码案例

1.数据准备

import torch
import torch.nn.functional as F     # 激励函数
from torch.autograd import Variablex = torch.linspace(-5, 5, 200)  # x data (tensor), shape=(100, 1)
x = Variable(x) #Variable是一个变量容器

2. 生成不同的激励函数数据

2.1 ReLU(rectified linear unit)函数

可以看出,ReLU函数只保留正数元素,并将负数元素清零。

2.2 sigmoid函数

sigmoid函数可以将元素的值变换到0和1之间:

sigmoid函数在早期的神经网络中较为普遍,但它目前逐渐被更简单的ReLU函数取代。

2.3 tanh函数

tanh(双曲正切)函数可以将元素的值变换到-1和1之间:

x_np = x.data.numpy()   # 换成 numpy array, 出图时用# 几种常用的 激励函数
y_relu = F.relu(x).data.numpy()
y_sigmoid = F.sigmoid(x).data.numpy()
y_tanh = F.tanh(x).data.numpy()
y_softplus = F.softplus(x).data.numpy()

3. 可视化激励函数

import matplotlib.pyplot as plt  plt.figure(1, figsize=(8, 6)) #画布大小
plt.subplot(221) #绘制多图,生成2行2列,1为序号
plt.plot(x_np, y_relu, c='red', label='relu')
plt.ylim((-1, 5)) #设定y轴的上下界限
plt.legend(loc='best')plt.subplot(222)
plt.plot(x_np, y_sigmoid, c='red', label='sigmoid')
plt.ylim((-0.2, 1.2))
plt.legend(loc='best')plt.subplot(223)
plt.plot(x_np, y_tanh, c='red', label='tanh')
plt.ylim((-1.2, 1.2))
plt.legend(loc='best')plt.subplot(224)
plt.plot(x_np, y_softplus, c='red', label='softplus')
plt.ylim((-0.2, 6))
plt.legend(loc='best')plt.show()

输出结果: 

 全部代码(自取):Nerual-Net-Simple-example/AF_Four.ipynb at main · SallBryant/Nerual-Net-Simple-example · GitHub

什么是激励函数?(代码+详细注释)相关推荐

  1. 【Python】python初学者应该知道与其他语言差异化的高效编程技巧(附测试代码+详细注释)

    目录 1. 交换变量 2. 集合去重 3. 列表推导.集合推导和字典推导 4. 统计字符串中各个字符出现的次数 5.优雅地打印JSON数据 6.行内的if语句 6. 符合正常逻辑的数值比较 7. 田忌 ...

  2. 【综合评价分析】熵权算法确定权重 原理+完整MATLAB代码+详细注释+操作实列

    [综合评价分析]熵权算法确定权重 原理+完整MATLAB代码+详细注释+操作实列 文章目录 1. 熵权法确定指标权重 (1)构造评价矩阵 Ymn (2)评价矩阵标准化处理 (3)计算指标信息熵值 Mj ...

  3. 【综合评价分析】topsis评价 原理+完整MATLAB代码+详细注释+操作实列

    [综合评价分析]topsis评价 原理+完整MATLAB代码+详细注释+操作实列 文章目录 1.TOPSIS法的原理 2.TOPSIS法案例分析 3.建立模型并求解 3.1数据预处理 3.2代码实现数 ...

  4. 手写YOLOv3|代码详细注释

    手写YOLOv3|代码详细注释 一. 数据预处理 一. Yolov3网络 一. Train 一. Detection 源代码:https://github.com/eriklindernoren/Py ...

  5. c语言期中项目实战二—简易扫雷,思路分析加代码详细注释

    c语言期中项目实战二-简易扫雷,思路分析+代码详细注释 游戏介绍 项目步骤 模块化编程 设置菜单 设置棋盘 打印棋盘 布置雷 排查雷 总结及总代码和详细注释 游戏介绍 扫雷这个经典游戏,直到现在仍有很 ...

  6. 鬼影3样本Mbr之后保护模式代码详细注释(最精华的地方啦)

    今天和明天是最后两天宿舍有空调的日子啦,暑假宿舍没空调啊,悲催T__T 好吧,今天是最精华的部分啦对于鬼影3的分析,剩下的都是浮云啦,alg.exe不准备分析了,能用OD调试的货.分析起来只是时间问题 ...

  7. 使用Python编写爬虫程序(代码详细注释),获取彼岸图网的图片

    文章目录 一.要求 二.设计 1.彼岸网站URL规则 2.程序流程图 三.代码(详细注释) 四.所遇到过的问题 一.要求 1.抓取目标 彼岸图网(http://pic.netbian.com)上的4K ...

  8. 图注意网络GAT理解及Pytorch代码实现【PyGAT代码详细注释】

    文章目录 GAT 代码实现[PyGAT] GraphAttentionLayer[一个图注意力层实现] 用上面实现的单层网络测试 加入Multi-head机制的GAT 对数据集Cora的处理 csr_ ...

  9. java代码详细注释_java代码详细注释

    请将下面的java程序代码给加详细的注释(部分已给出),谢谢了,回答满意再追加20分publicclassChatUDPJFrameextendsJFrameimplementsActionListe ...

  10. SAP CRM BOL编程基础,代码+详细注释

    网络上可以找到一些使用BOL查询.维护数据的DEMO,但几乎都是单纯的代码,缺乏说明,难以理解.本文除了代码外,还给出了详细的注释,有助于理解BOL编程中的一些基本概念. 这是一篇翻译的文章,你可能会 ...

最新文章

  1. 请把我不会,换成我可以学
  2. JK_Rush关于索引的一些总结
  3. GraphQL query的schema校验
  4. 整数分解为若干项之和python_SVD奇异值分解及Python实例
  5. java加解密之DES多种使用方式
  6. 华为机试4.27:购买水果最便宜的方案
  7. Nginx反向代理、静态资源下载
  8. 实用供暖通风空调设计手册 第三版_实用供热空调设计手册(第三版)“流体输配与水力平衡”技术专题讨论会...
  9. 很遗憾,该服务器不支持 jmail 组件!,jmail组件注册以及权限设置问题
  10. 什么是“海恩法则”?
  11. css练习-小米官网首页静态页面制作
  12. 阿里云赵明山:详解灵活可插拔的渐进式发布框架OpenKruise Rollout
  13. scrapy 去重 dont_filter=False
  14. 金蝶BOS开发代码调用过程
  15. 抖音同款口红机 微信口红机 在线游戏口红机开发代码 分析
  16. 计算机应用 审稿时间,计算机应用研究发表要多长时间
  17. 10余年软件开发与系统架构经验,一起聊聊软件开发技术、系统架构技术、以及程序员最真实可行的职场打怪技能,代码之外的生存软技能。
  18. 拨乱反正:MyISAM中key_buffer_size的设置
  19. python中函数不包括参数函数二阶导数公式_请问参数方程确定的函数的二阶导数公式的详细推导过程?...
  20. 何洛洛高考成绩查询2021,R1SE曾想续约:11少年毕业发言催泪,周震南更文,何洛洛哭上热搜...

热门文章

  1. UTP网线和FTP网线,哪一种更适合超六类布线?
  2. J2EE框架搭建大集合
  3. 浏览器Cookie详解
  4. IntelliJ IDEA主题选择
  5. 面向对象七大基本原则
  6. linux 端口关闭防火墙设置,LINUX关闭防火墙、开放特定端口等常用操作
  7. Python基础语法题库
  8. Micropython加速物联网开发4 - SPI驱动5110LCD屏
  9. 计算机四级题库百度云,四级题库免费
  10. 蓝牙模块 HC-06