PyTorch学习笔记之激活函数篇(三)

文章目录

    • 3、ReLU
      • 3.1 公式
      • 3.2 对应的图像
      • 3.3 对应的图像的代码
      • 3.4 优点与不足
      • 3.5 torch.relu()函数

3、ReLU

3.1 公式

ReLU函数的公式:
f ( x ) = { x , x > = 0 0 , x < 0 f(x) = \begin{cases} x&,x>=0 \\ 0&,x<0 \end{cases} f(x)={x0,x>=0,x<0

ReLU函数的导函数:
f ′ ( x ) = { 1 , x > = 0 0 , x < 0 f'(x) = \begin{cases} 1&,x>=0 \\ 0&,x<0 \end{cases} f(x)={10,x>=0,x<0

3.2 对应的图像

在这里插入图片描述

3.3 对应的图像的代码

import numpy as np
import matplotlib.pyplot as plt# 定义 x 的范围
x = np.linspace(-10, 10, 1000)# 计算 ReLU 值
relu_values = np.maximum(0, x)# 计算 ReLU 的导数
relu_derivative_values = np.where(x > 0, 1, 0)# 绘制 ReLU 函数
plt.plot(x, relu_values, label='ReLU(x)')# 绘制 ReLU 的导数
plt.step(x, relu_derivative_values, where='post', label='Derivative of ReLU(x)')# 设置图例
plt.legend()# 设置标题和轴标签
plt.title('ReLU Function and Its Derivative')
plt.xlabel('x')
plt.ylabel('y')# 显示网格
plt.grid(True)# 显示图形
plt.show()

3.4 优点与不足

ReLU函数:
1、ReLU 函数在正输入时是线性的,收敛速度快,计算速度快,同时符合恒等性的特点。当输入为正时,由于导数是1,能够完整传递梯度,不存在梯度消失的问题(梯度饱和问题)。
2、计算速度快。ReLU 函数中只存在线性关系且无论是函数还是其导数都不包含复杂的数学运算,因此它的计算速度比 sigmoid 和 tanh 更快。
3、当输入大于0时,梯度为1,能够有效避免链式求导法则梯度相乘引起的梯度消失和梯度爆炸;计算成本低。
4、它保留了 step 函数的生物学启发(只有输入超出阈值时神经元才激活),不过当输入为正的时候,导数不为零,从而允许基于梯度的学习(尽管在 x=0 的时候,导数是未定义的)。当输入为负值的时候,ReLU 的学习速度可能会变得很慢,甚至使神经元直接无效,因为此时输入小于零而梯度为零,从而其权重无法得到更新,在剩下的训练过程中会一直保持静默。
ReLU不足:
1、ReLU的输入值为负的时候,输出始终为0,其一阶导数也始终为0,这样会导致神经元不能更新参数,也就是神经元不学习了,这种现象叫做“Dead Neuron”。为了解决ReLU函数这个缺点,在ReLU函数的负半区间引入一个泄露(Leaky)值,所以称为Leaky ReLU函数。
2、与Sigmoid一样,其输出不是以0为中心的(ReLU的输出为0或正数)。
3、ReLU在小于0的时候梯度为零,导致了某些神经元永远被抑制,最终造成特征的学习不充分;这是典型的 Dead ReLU 问题,所以需要改进随机初始化,避免将过多的负数特征送入ReLU。

3.5 torch.relu()函数

在PyTorch中,torch.relu 是一个常用的激活函数,它实现了ReLU (Rectified Linear Unit) 及其导数的计算。ReLU函数对于输入的每个元素都执行以下操作:

f(x) = max(0, x)

即,如果输入值 x 是负数,输出为0;如果 x 是非负数,输出就是 x 本身。

在PyTorch中,torch.relu 不仅可以用来计算ReLU激活函数的值,而且当反向传播时,它会自动计算并应用ReLU的导数。ReLU的导数很简单:

f'(x) = 1 if x > 0= 0 if x <= 0

也就是说,当输入值大于0时,ReLU的导数是1;当输入值小于或等于0时,ReLU的导数是0。

以下是如何在PyTorch中使用 torch.relu 的示例:

import torch# 创建一个张量
x = torch.tensor([-1.0, 0.0, 1.0, 2.0])# 计算ReLU激活函数的值
y = torch.relu(x)# 输出ReLU激活函数的值
print(y)  # 输出: tensor([0., 0., 1., 2.])# 假设我们有一个关于y的梯度,我们需要反向传播这个梯度到x
y.backward(torch.tensor([1.0, 1.0, 1.0, 1.0]))# 输出x的梯度(即ReLU的导数)
print(x.grad)  # 输出: tensor([0., 0., 1., 1.])

在这个例子中,你可以看到当 x 的值为负时(例如 -1.0 和 0.0),对应的 x.grad(即ReLU的导数)是 0;而当 x 的值为正时(例如 1.0 和 2.0),对应的 x.grad 是 1。这正好符合ReLU导数的定义。

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

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

相关文章

Vue 3响应式系统详解:ref、toRefs、reactive及更多

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

为什么延迟删除可以保证MYSQL 与redis的一致性?

看过很多保持MYSQL 与redis保持一致性的文章都提到了延迟删除&#xff0c;其实脱离任何业务场景的设计都是不切实际的&#xff0c;所以我会本着一个通用的读写场景去分析为什么延迟删除大概率可以保证MYSQL与redis的最终一致。 通常的读写场景 通常在使用redis作为读写缓存时…

Oracle SEQUENCE实现自增流水号,并设置定时任务每日清零

--创建增长序列 create sequence IMES.TEST_SEQ_PALLET minvalue 1 maxvalue 1336335 start with 1 increment by 1 nocache cycle order; --测试 select IMES.TEST_SEQ_PALLET.nextval from dual; --创建存储过程重置自增序列从1开始 IMES.TEST_SEQ_RESET_NEXT create or r…

无人机/飞控--ArduPilot、PX4学习记录(2)

这是一篇碎碎念&#xff0c;零零碎碎的记录了环境配置过程&#xff0c;仅供本人记录学习历程和参考。(记录的挺乱的&#xff0c;但是文章链接里的博客写的是真好) 本章主要完成的目标&#xff1a; 安装PX4 并 成功运行出3D无人机界面。 参考文章&#xff1a; 搭建PX4环境&…

虹科干货 | 网络取证分析和入侵分析培训重磅来袭,先来认真预习!什么是IOC?应该如何识别和响应?

文章速览&#xff1a; 网络安全中的IOC是什么&#xff1f;IOC和IOA有什么区别&#xff1f;IOC有哪些类型&#xff1f;IOC的常见实例有哪些&#xff1f;IOC解决方案和工具 近期&#xff0c;Wireshark 大学和 虹科Allegro Packets联合举办了网络取证和入侵分析线上培训课程&…

cv::Mat::depth() 获取图像的深度时返回值为0?

在OpenCV中&#xff0c;当使用函数比如 cv::Mat::depth() 获取图像的深度时&#xff0c;返回的整数值是代表数据类型的枚举值&#xff0c;而不是直接的比特数。这些枚举值定义在cv::Mat的数据类型中&#xff0c;用于描述像素值的数据类型及其位深度。如果cv::Mat::depth() 返回…

不同的Git仓库单独设置用户名和邮件地址

最近使用公司电脑将自己的一个私人项目推送到远程仓库&#xff0c;仓库显示的公司邮箱地址。因为设置了全局的username和usermail&#xff0c;这样就比较尴尬了。但是又不能频繁来回改用户信息&#xff0c;那么请看下面如何单独设置仓库的用户信息&#xff0c;让不同的仓库展示…

走上管理岗才发现:所谓工作能力强,就一点

走上管理岗才发现&#xff1a;所谓工作能力强&#xff0c;就一点 建立SOP‼️ - 我二本工科&#xff0c;电力专业&#xff0c;从现场工程师到新能源公司核心部门经理&#xff0c;入职公司三个月直接升职加薪。 - 我刚从工程师升至经理带团队的时候&#xff0c;经常靠加班续命&a…

zookeeper底层细节

zk 临时节点和watch机制实现注册中心自动注册和发现&#xff0c;数据都在内存&#xff0c;nio 多线程模型&#xff1b; cp注重一致性&#xff0c;数据不一致时集群不可用 事务请求处理方式 1.all事务由唯一服务器处理 2.将客户端事务请求转成proposal分发follower 3.等待半…

部署单节点k8s并允许master节点调度pod

安装k8s 需要注意的是k8s1.24 已经弃用dockershim&#xff0c;现在使用docker需要cri-docker插件作为垫片&#xff0c;对接k8s的CRI。 硬件环境&#xff1a; 2c2g 主机环境&#xff1a; CentOS Linux release 7.9.2009 (Core) IP地址&#xff1a; 192.168.44.161 一、 主机配…

【spring】@ConditionalOnResource注解学习

ConditionalOnResource 介绍 ConditionalOnResource 是Spring框架中的一个条件化注解&#xff0c;它允许你根据类路径中是否存在指定的资源来决定是否加载特定的Bean定义或配置类。这个注解可以用于类级别或方法级别。 具体Conditional使用请看这篇文章【spring】Conditional…

停车管理系统asp.net+sqlserver

停车管理系统asp.netsqlserver 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库&#xff0c; 功能模块&#xff1a; 停车管理系统asp.net sqlserver 用户功能有菜单列表 我的停车记录 专…

vue3<setup>中判断当前视口距离顶部的距离

在 Vue 3 的 <script setup> 语法中&#xff0c;你可以使用 Composition API 来跟踪视口距离顶部的距离。你可以创建一个响应式的 ref 来存储这个距离&#xff0c;并在 onMounted 生命周期钩子中设置一个滚动事件监听器来更新这个值。下面是一个示例&#xff1a; <te…

VMWare虚拟机使用openmediavault搭建NAS服务器完整步聚

下载: gopenmediavault - The open network attached storage solution 下载好openmediavault的ISO镜像后,打开虚拟机并安装 系统类型选择Debian 启动虚拟机并安装openmediavault 选择中文 地区选中国 键盘配置选汉语 开始安装 配置网络信息 配置root密码 确认密码 系统安装中…

贪心算法概念

前言 一种在问题求解过程中总是做出当前看来最优选择的策略。这个"最优选择"是在某个特定意义上的局部最优解&#xff0c;而不是全局最优解。 贪心算法并非对所有问题都能得到整体最优解&#xff0c;其关键在于贪心策略的选择。所选取的贪心策略必须具备无后效性&…

零基础机器学习(3)之机器学习的一般过程

文章目录 一、机器学习一般过程1.数据获取2.特征提取3.数据预处理①去除唯一属性②缺失值处理A. 均值插补法B. 同类均值插补法 ③重复值处理④异常值⑤数据定量化 4.数据标准化①min-max标准化&#xff08;归一化&#xff09;②z-score标准化&#xff08;规范化&#xff09; 5.…

构造算法详解

构造题是比赛和解决问题的过程中比较常见的题型。他们通常要求解题者通过观察问题的结构和规律&#xff0c;找到一种通用过的方法或模式&#xff0c;使得在问题规模增大时&#xff0c;依然能够高效地得到答案 观察问题规模的增长&#xff1a;了解问题随规模的增大&#xff0c;…

应用改进SA算法实现MATLAB-HFSS交互仿真与天线优化

应用改进SA算法实现MATLAB-HFSS交互仿真与天线优化 第一章SA算法及其简单应用1.1 SA算法简介1.2 SA算法原理1.2.1 SA算法原理 1.3 Metropolis准则及退火过程中的参数控制1.3.1 Metropolis准则1.3.2退火过程中的参数控制 1.4 SA算法简单应用 第二章 改进SA算法2.1 改进方向2.2 改…

Android Preference简单介绍

Android Preference简单介绍 文章目录 Android Preference简单介绍一、前言二、Preference 简单介绍二、PreferenceScreen和SwitchPreference 简单示例2、相关demo代码示例&#xff08;1&#xff09;SettingsActivity.Java&#xff08;2&#xff09;layout\settings_activity.x…

Qt学习笔记(一)——Qt初识

本文仅是 学习时记录的笔记&#xff0c;供自己复习时使用。 1.创建好文件(QWidget窗口) main.cpp中&#xff1a; 注&#xff1a;Widget类继承父类QWidget. widget.h中&#xff1a; Widget.cpp中&#xff1a; 打开Forms文件夹中的widget.ui文件&#xff1a; 打开左边编辑&am…