第四章:人工智能深度学习教程-激活函数(第三节-Pytorch 中的激活函数)

在本文中,我们将了解 PyTorch 激活函数。

目录

什么是激活函数以及为什么使用它们?

Pytorch 激活函数的类型

ReLU 激活函数:

Python3

Leaky ReLU 激活函数:

Python3

S 形激活函数:

Python3

Tanh 激活函数:

Python3

Softmax 激活函数:

Python3


什么是激活函数以及为什么使用它们?

激活函数是 Pytorch 的构建块。在讨论激活函数的类型之前,让我们首先了解人脑中神经元的工作原理。在人工神经网络中,我们有一个输入层,它是用户以某种格式输入的输入,一个隐藏层,它执行隐藏计算并识别特征,输出就是结果。所以整个结构就像一个神经元相互连接的网络。所以我们有由这些激活函数激活的人工神经元。激活函数是执行计算以提供可以充当下一个神经元的输入的输出的函数。理想的激活函数应该利用线性概念来处理非线性关系,并且应该是可微的,以减少误差并相应地调整权重。所有激活函数都存在于 torch.nn 库中。

Pytorch 激活函数的类型

让我们看看不同的 Pytorch 激活函数:

  • ReLU激活函数
  • 泄漏 ReLU 激活函数
  • S 形激活函数
  • Tanh 激活函数
  • Softmax 激活函数

ReLU 激活函数:

ReLU 代表修正线性激活函数。它是一个非线性函数,从图形上看 ReLU 具有以下变换行为:

ReLU激活函数

 

ReLU 是一种流行的激活函数,因为它是可微分和非线性的。如果输入为负,则其导数变为零,这会导致神经元“死亡”并且学习不会发生。让我们借助 Python 程序来说明 ReLU 的使用。

Python3

import torch
import torch.nn as nn

# 定义ReLU激活函数
r = nn.ReLU()

# 创建一个包含数组的Tensor
input = torch.Tensor([1, -2, 3, -5])

# 将数组传递给ReLU激活函数
output = r(input)

print(output)

这段代码执行以下操作:

  • 导入PyTorch库,并导入神经网络模块 torch.nn

  • 使用 nn.ReLU() 创建ReLU激活函数的实例,命名为 r

  • 创建一个包含数组的PyTorch Tensor,名为 input

  • 将该数组传递给ReLU激活函数,通过 r(input) 得到输出 output

  • 打印输出结果。

ReLU激活函数对输入进行逐元素操作,将负值置零,保留正值。这有助于引入非线性性质,使神经网络能够学习更复杂的函数。

输出:

tensor([1., 0., 3., 0.])

 输出的Tensor包含了ReLU激活函数作用后的结果,其中负值变为零,正值保持不变。

Leaky ReLU 激活函数:

Leaky ReLU 激活函数或 LReLU 是另一种类型的激活函数,与 ReLU 类似,但解决了“死亡”神经元的问题,并且从图形上看,Leaky ReLU 具有以下转换行为:

泄漏 ReLU 激活函数

 

该函数非常有用,因为当输入为负时,函数的微分不为零。因此神经元的学习不会停止。让我们借助 Python 程序来说明 LReLU 的使用。

Python3

import torch
import torch.nn as nn

# 定义LeakyReLU激活函数,参数0.2控制负斜率;a=0.2
r = nn.LeakyReLU(0.2)

# 创建一个包含数组的Tensor
input = torch.Tensor([1, -2, 3, -5])

# 将数组传递给LeakyReLU激活函数
output = r(input)

print(output)

这段代码执行以下操作:

  • 导入PyTorch库,并导入神经网络模块 torch.nn

  • 使用 nn.LeakyReLU(0.2) 创建LeakyReLU激活函数的实例,其中参数 0.2 控制负斜率。

  • 创建一个包含数组的PyTorch Tensor,名为 input

  • 将该数组传递给LeakyReLU激活函数,通过 r(input) 得到输出 output

  • 打印输出结果。

LeakyReLU激活函数允许负值有一个小的斜率,而不是直接置零,以引入一定程度的非线性性。这对于训练某些类型的神经网络可能会更有利。

输出:

tensor([ 1.0000, -0.4000,  3.0000, -1.0000])

输出的Tensor包含了LeakyReLU激活函数作用后的结果,其中负值具有小的斜率,正值保持不变。在这个例子中,参数 0.2 控制了负值的斜率。 

S 形激活函数:

Sigmoid 函数是一种非线性且可微的激活函数。它是一条不经过原点的S形曲线。它产生介于 0 和 1 之间的输出。输出值通常被视为概率。它通常用于二元分类。它的计算速度很慢,并且从图形上看,Sigmoid 具有以下转换行为:

S 形激活函数

 

Sigmoid激活函数存在“梯度消失”的问题。梯度消失是一个重要的问题,因为大量输入被输入神经网络,并且隐藏层数量增加,梯度或导数变得接近于零,从而导致神经网络不准确。

让我们借助 Python 程序来说明 Sigmoid 函数的使用。

Python3

import torch
import torch.nn as nn

# 调用Sigmoid激活函数
sig = nn.Sigmoid()

# 定义一个包含数组的Tensor
input = torch.Tensor([1, -2, 3, -5]) 

# 将数组传递给Sigmoid激活函数
output = sig(input)

print(output)

这段代码执行以下操作:

  • 导入PyTorch库,并导入神经网络模块 torch.nn

  • 使用 nn.Sigmoid() 调用Sigmoid激活函数的实例,命名为 sig

  • 定义一个包含数组的PyTorch Tensor,名为 input

  • 将该数组传递给Sigmoid激活函数,通过 sig(input) 得到输出 output

  • 打印输出结果。

Sigmoid激活函数将输入的每个元素压缩到 (0, 1) 范围内,常用于二分类问题中的输出层。在这个例子中,输入数组经过Sigmoid激活函数后,输出的Tensor包含了每个元素的Sigmoid变换结果。

输出:

tensor([0.7311, 0.1192, 0.9526, 0.0067])

在这段代码中,input 是包含数字 [1, -2, 3, -5] 的Tensor。然后,通过sig(input)将这个Tensor传递给Sigmoid激活函数,并将结果存储在output中。最后,你打印输出output

运行这段代码后,你会看到Sigmoid激活函数应用于输入数组,输出对应的Sigmoid函数值。 Sigmoid函数的输出范围在0到1之间。

Tanh 激活函数:

Tanh 函数是一种类似于 sigmoid 函数的非线性可微函数,但输出值范围为 -1 到 +1。它是一条穿过原点的 S 形曲线,从图形上看,Tanh 具有以下变换行为:

Tanh 激活函数

 

Tanh 激活函数的问题是速度慢并且梯度消失问题仍然存在。让我们借助 Python 程序来说明 Tanh 函数的使用。

Python3

import torch
import torch.nn as nn

# 调用Tanh激活函数
t = nn.Tanh()

# 定义一个包含数字的Tensor
input = torch.Tensor([1, -2, 3, -5]) 

# 将数组传递给Tanh激活函数
output = t(input)

# 打印输出结果
print(output)

输出:

tensor([ 0.7616, -0.9640,  0.9951, -0.9999])

 解释:这段代码使用PyTorch库创建了一个包含Tanh激活函数的神经网络模块。定义了一个包含数字 [1, -2, 3, -5] 的Tensor,然后通过output = t(input)将这个Tensor传递给Tanh激活函数。最后,打印输出了Tanh函数应用于输入数组后的结果。Tanh函数的输出范围在-1到1之间。

Softmax 激活函数:

softmax 函数与其他激活函数不同,因为它被放置在最后以标准化输出。我们可以将其他激活函数与 Softmax 结合使用来产生概率形式的输出。它用于多类分类,生成总和为 1 的概率输出。输出范围在 0 到 1 之间。Softmax 具有以下变换行为:

Softmax 激活函数

 

让我们借助 Python 程序进行说明:

Python3

import torch
import torch.nn as nn

# 调用维度为0的Softmax函数
sm = nn.Softmax(dim=0)

# 定义一个包含数字的Tensor
input = torch.Tensor([1, -2, 3, -5])

# 将数组传递给Softmax函数
output = sm(input)

# 打印输出结果
print(output)

输出:

tensor([0.8378, 0.0351, 0.9459, 0.0001])

 解释:这段代码使用PyTorch库创建了一个包含维度为0的Softmax函数的神经网络模块。定义了一个包含数字 [1, -2, 3, -5] 的Tensor,然后通过output = sm(input)将这个Tensor传递给Softmax函数。最后,打印输出了Softmax函数应用于输入数组后的结果。Softmax函数将输入的每个元素转换为表示概率的值,使得所有输出的总和为1。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

死锁问题概述

文章目录 死锁的概念死锁的定义相似概念:饥饿死锁产生的原因死锁产生的必要条件死锁的预防破坏互斥条件破坏不可剥夺/不可抢占条件破坏请求并保持条件破坏循环等待条件 死锁避免安全性算法 死锁的处理策略死锁的检测死锁的解除 死锁的概念 死锁的定义 多个进程由于…

使用超融合,网络交换机如何选型与配置?

很多用户在部署超融合集群时,都会关注网络交换机的选型与配置。我们在这篇文章中整理了一些关于网络交换机的常见提问,并邀请 SmartX 技术专家进行了详细解答。 Q1. 超融合架构下,网络交换机是如何部署的?需要多少台交换机&#x…

火爆全网!用 Pyecharts 就能做出来“迁徙图“和“轮播图“

1.pyecharts知识点回顾 1)知识回顾 前面我们已经讲述了,如何使用pyecharts进行图形的绘制,一共涉及到如下四步。我们今天就是按照下面这几步来进行迁徙图和轮播图的绘制。 ① 选择图表类型; ② 声明图形类并添加数据&#xff1…

Linux-Shell命令行解释器的模拟实现

引言:本篇文章主要是简单实现一个shell命令行解释器,可以支持基础常见的linux的命令,支持内建命名echo、cd,同时支持重定向的操作! 一、代码剖析 1. 头文件引入: 因代码是在linux下实现,引入的…

全国5米高程DEM数据及衍生的全国地形起伏度数据

地表起伏度,也有称为地势起伏度、地形起伏度,是指某点在其确定面积的域内的最高点与最低点之间的高差。地表起伏度概念的核心在于如何确定该点的计算域。在统计意义上,随着计算域范围的增大,地表起伏度将逐渐增大。 因此&#xff…

GitHub上的开源工业软件

github上看到一个中国人做的流体力学开源介绍,太牛了! https://github.com/clatterrr/FluidSimulationTutorialsUnity 先分析一下工业仿真软件赛道 工业仿真软件的赛道和产品主要功能如下: 1. 工艺仿真赛道: - 工厂布局优化&am…

linux 下 mysql8 修改root初始密码

背景 linux下安装完mysql8以后,无法使用root用户登录或者忘记了root用户的密码,需要修改root用户的密码; 步骤 不想翻译了,专业人员都能看懂。完结 链接 MySQL :: MySQL 8.0 Reference Manual :: B.3.3.2 How to Reset the Roo…

MATLAB|不给糖果就捣蛋

目录 扫一扫关注公众号 效果图 代码 绘制南瓜 绘制无脸男小鬼 其中绘制风车代码: 其中 EllipsePlotter类函数代码如下 属性 (properties) 方法 (methods) 扫一扫关注公众号 效果图 代码 绘制南瓜 clc;clear;close all; [X,Y,Z]sphere(200); R1(-(1-mod(0:…

centos 7.9系统安装老版本jenkins,并解决插件问题

1.初衷 因为jenkins随着时间推移,其版本也越来越新,支持它运行的JDK也越来越新。基于不折腾的目标,我们安装一个老的固定版本就行。以前安装新版本,经常碰到的问题就是插件安装不兼容的问题。现在这个问题,可以把以前…

MySQL的默认引擎为什么是InnoDB

MySQL支持InnoDB、MyISAM、MEMORY、CSV等多个存储引擎,那为什么选InnoDB作为默认引擎呢? 主要原因有几点: 事务 事务主要用于保持数据一致性,是一组操作的集合,要么全部成功,要么全部失败。InnoDB引擎提供…

Kubernetes平台部署Grafana Loki Promtail系统

部署结构图: Loki 是主服务,负责存储日志和处理查询promtail 是代理,负责收集日志并将其发送给 lokiGrafana 用于 UI 展示 只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储,就可以在Grafana UI界面通过添加Lok…

通过docker快速部署RabbitMq

查询镜像: docker search rabbitmq拉去RabbitMq镜像: docker pull rabbitmq:management创建数据卷: docker volume create rabbitmq-home运行容器: docker run -id --namerabbitmq -v rabbitmq-home:/var/lib/rabbitmq -p 156…

解决docker tag打标签时报错:Error response from daemon: no such id

现象: 原因: docker tag时不仅仅要Repository仓库名,也需要原有的tag作为版本号 解决办法: docker tag 原有仓库名: 原有tag值 新的打标名称 问题解决!

【LeetCode百道热题】1.两数之和

一,题目描述 给定一个整数数组nums和一个整数目标值target,请你在改数组中找出和为目标值target的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案,但是,数组中同一个元素在答案里不能重复出现…

陈海波:OpenHarmony技术领先,产学研深度协同,生态蓬勃发展

11月4日,以“技术筑生态,智联赢未来”为主题的第二届OpenHarmony技术大会在北京隆重举办。本次大会由OpenAtom OpenHarmony(简称“OpenHarmony")项目群技术指导委员会(TSC)主办,由华为技术…

【STM32-DSP库的使用】基于Keil5 + STM32CubeMX 手动添加、库添加方式

STM32-DSP库的使用 一.CMSIS-DSP1.1 DSP库简介1.2 支持的函数类别1.3 宏定义 二、操作2.1 STM32CubeMX 配置基本工程2.2 Lib库的方式实现(推荐)2.3 手动添加DSP文件(可以下载官方最新库,功能齐全) 三、MFCC测试DSP加速效果 为验证语音识别MFC…

搭建 Makefile+OpenOCD+CMSIS-DAP+Vscode arm-none-eabi-gcc 工程模板

STM32F407-GCC-Template Arm-none-eabi-gcc MakefileOpenOCDCMSIS-DAPVscode工程模板 一、本次环境搭建所用的软硬件 1)Windows or Linux (本文以Windows为主) 2)JLink、Daplink、Wch-Link烧录器 3)GNU Arm Embedded Toolchain交叉编译…

C++模板元模板实战书籍讲解第一章题目讲解

目录 第一题 C代码示例 第二题 C代码示例 第三题 3.1 使用std::integral_constant模板类 3.2 使用std::conditional结合std::is_same判断 总结 第四题 C代码示例 第五题 C代码示例 第六题 C代码示例 第七题 C代码示例 总结 第一题 对于元函数来说,…

贺天下功夫酱酒闪耀亮相2023佛山秋色系列活动

11月1日至5日,2023年广东非遗周暨佛山秋色巡游系列活动在佛山举行,以“品味佛山 秋醉岭南”为主题,好戏连台。贵州贺天下酒业独家赞助佛山祖庙秋祭、乡饮酒礼,还全面参与佛山秋色巡游、佛山非遗美食展、佛山非遗音乐会等多个活动&…

centos k8s安装dapr

文章目录 安装helm更新helm库初始化dapr高可用方式安装 卸载dapr验证k8s的dapr安装rocketmq总结 安装helm 三个包放到一个目录下 chmod x get ./get helm version更新helm库 helm repo add dapr https://dapr.github.io/helm-charts/ helm repo update helm search repo dapr …