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

news2024/11/22 20:12:20

在本文中,我们将了解 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。

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

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

相关文章

计算机丢失mfc140.dll是什么意思?附送修复教程

mfc140.dll是Microsoft Foundation Classes(MFC)库的一部分,是一种动态链接库(DLL)文件。MFC库是Microsoft提供的一种C编程框架,它为开发者提供了许多方便的工具和类,以简化Windows应用程序的开…

兴达易控485Modbus转profinet网关应用于搅拌站的配置案例

在兴达易控485Modbus转profinet网关(XD-MDPN100)的帮助下,该搅拌站采用了双行星动力搅拌桨混合器与PLC和变频器进行通信,从而实现对变频器的精确控制,大大提高了搅拌过程的稳定性和效率。 该方案还具有高度的灵活性和可扩展性,使…

Oracle11g for centos7

准备工作 x86 centos7 oracle11G 环境搭建 配置好虚拟机,网络通畅,建议最少3G内存。 安装依赖 yum install binutils compat-libstdc-33 glibc* ksh gcc gcc-c libgcc libstdc* libaio libaio-devel libXext libX11 libXau libxcb libXi make sy…

计算机丢失mfc100.dll如何恢复,详细解析mfc100.dll文件丢失解决方法

在计算机使用过程中,我们可能会遇到一些错误提示,比如“mfc100.dll丢失”。这是因为动态链接库(DLL)文件是Windows操作系统的重要组成部分,它们包含了许多程序运行所需的函数和数据。当这些DLL文件丢失或损坏时&#x…

2023年腾讯云双11活动入口在哪里?

2023年双11腾讯云推出了11.11大促优惠活动,下面给大家分享腾讯云双11活动入口、活动时间、活动详情,希望可以助力大家轻松上云! 一、腾讯云双11活动入口 活动地址:点此直达 二、腾讯云双11活动时间 腾讯云双11活动时间跨度很长…

【C++干货铺】STL简述 | string类的使用指南

个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 什么是STL STL的版本 STL的六大组件 STL的缺陷 string类 C语言中的字符串 标准库中的string类 string类常用的接口使用指南 string类中常见的构造 strin…

【Linux精讲系列】——vim详解

​作者主页 📚lovewold少个r博客主页 ⚠️本文重点:c入门第一个程序和基本知识讲解 👉【C-C入门系列专栏】:博客文章专栏传送门 😄每日一言:宁静是一片强大而治愈的神奇海洋! 目录 目录 ​作者…

Docker 学习路线 13:部署容器

部署容器是使用Docker和容器化管理应用程序更高效、易于扩展和确保跨环境一致性性能的关键步骤。本主题将为您概述如何部署Docker容器以创建和运行应用程序。 概述 Docker容器是轻量级、可移植且自我包含的环境,可以运行应用程序及其依赖项。部署容器涉及启动、管…

vivado时序分析-2时序分析关键概念

时序分析关键概念 1、最大和最小延迟分析 时序分析属静态验证 , 旨在验证在硬件上加载并运行设计后 , 其时序行为的可预测性。它会将各种制造和环境变化因素组合到延迟模型中并按时序角及其变化量加以分组, 将所有这些要素一并纳入考量范围。…

XSS 跨站点脚本漏洞详解

文章目录 漏洞概述XSS漏洞原理xss漏洞危害xss漏洞验证XSS漏洞分类反射型存储型DOM型 固定会话攻击原理简单xss注入复现 XSS 攻防xss构造方法利用标签符号<>事件响应javascript伪协议其他标签 XSS 变形方式xss防御黑白名单策略输入过滤 案例XSS 盲打 漏洞概述 ​ 跨站点脚…

简单理解 Sentinel 滑动窗口实现原理

theme: serene-rose 1. 引言 Hi&#xff0c;你好&#xff0c;我是有清 对于刚经历过双 11 的电商人来说&#xff0c;限流这个词肯定在 10.24 的晚 20.00 点被提起过 限流作为保护我们系统不被流量冲垮的手段之一&#xff0c;建议每个电商人深入了解学习&#xff0c;什么&#x…

ansible-第二天

ansible 第二天 以上学习了ping、command、shell、script模块&#xff0c;但一般不建议使用以上三个&#xff0c;因为这三个模块没有幂等性。举例如下&#xff1a; [rootcontrol ansible]# ansible test -a "mkdir /tmp/1234"[WARNING]: Consider using the file …

GitHub上的开源工业软件

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

人工智能模型转ONNX 连接摄像头使用ONNX格式的模型进行推理

部署之后模型的运算基本上能快5倍。本地部署之后&#xff0c;联网都不需要&#xff0c;数据和隐私不像在网上那样容易泄露了。 模型部署的通用流程 各大厂商都有自己的推理工具。 训练的归训练&#xff0c;部署的归部署&#xff0c;人工智能也分训练端和部署端&#xff0c;每一…

派金SDK接入文档

一、接入SDK 1、将sdk文件手动导入到目标项目中&#xff0c;如下图所示&#xff1a; 2、该SDK需接入其他三方广告&#xff0c;通过pod的方式接入&#xff0c;在Profile中加入如下代码&#xff1a; pod GDTMobSDK, ~> 4.14.40pod BaiduMobAdSDK, ~> 5.313pod KSAdSDK…

pytorch中常用的损失函数

1 损失函数的作用 损失函数是模型训练的基础&#xff0c;并且在大多数机器学习项目中&#xff0c;如果没有损失函数&#xff0c;就无法驱动模型做出正确的预测。 通俗地说&#xff0c;损失函数是一种数学函数或表达式&#xff0c;用于衡量模型在某些数据集上的表现。损失函数在…

数模之线性规划

线性规划 优化类问题&#xff1a;有限的资源&#xff0c;最大的收益 例子: 华强去水果摊找茬&#xff0c;水果摊上共3个瓜&#xff0c;华强总共有40点体力值,每劈一个瓜能带来40点挑衅值,每挑一个瓜问“你这瓜保熟吗”能带来30点挑衅值,劈瓜消耗20点体力值&#xff0c;问话消耗…

Linux awk命令

除了使用 sed 命令&#xff0c;Linux 系统中还有一个功能更加强大的文本数据处理工具&#xff0c;就是 awk。 曾有人推测 awk 命令的名字来源于 awkward 这个单词。其实不然&#xff0c;此命令的设计者有 3 位&#xff0c;他们的姓分别是 Aho、Weingberger 和 Kernighan&#x…

7+差异分析+WGCNA+PPI网络,学会了不吃亏

今天给同学们分享一篇生信文章“Integrated PPI- and WGCNA-Retrieval of Hub Gene Signatures Shared Between Barretts Esophagus and Esophageal Adenocarcinoma”&#xff0c;这篇文章发表在Front Pharmacol期刊上&#xff0c;影响因子为5.6。 结果解读&#xff1a; 选定研…

【解决方案】vue 项目 npm run dev 时报错:‘cross-env‘ 不是内部或外部命令,也不是可运行的程序

报错 cross-env 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! estate1.0.0 dev: cross-env webpack-dev-server --inline --progress --config build/webpack.dev.conf.js npm ERR! Exit status 1 np…