深度学习pytorch——激活函数损失函数(持续更新)

论生物神经元与神经网络中的神经元联系——为什么使用激活函数?

我们将生物体中的神经元与神经网络中的神经元共同分析。从下图可以看出神经网络中的神经元与生物体中的神经元有很多相似之处,由于只有刺激达到一定的程度人体才可以感受到刺激,并且人体对刺激做出的响应是有限的,所以在输出之前应该经过激活函数。这个激活函数可以将原来发散的数据变成收敛的数据。

什么是梯度?

函数在某一点的梯度是这样一个向量,它的方向与取得最大方向导数的方向一致,而它的模为方向导数的最大值

接下来我们将研究激活函数的梯度问题,我们将从代码实践中,获得明确的结果,更清楚激活函数的作用。

激活函数及其梯度

我们如果使用如下函数,会发现在0点函数是不可导的,我们找到一个近似此函数的分布的可导函数。

1、Sigmoid/Logistic

sigmoid函数的取值范围为[0, 1],因此可以使用sigmoid函数可以对数据进行压缩。

注意:由于sigmoid函数随着x的增大会逐渐趋近于1,此时sigmod的导数,就是趋近于0,就是梯度为0,在对参数进行更新的过程中我们会使用到梯度,新参数=旧参数-学习率*梯度,这就会导致参数长时间得不到更新,造成梯度离散的情况。

对sigmoid函数求导,可以得到。由于激活函数在神经网络中是已知的,因此sigmoid函数的导数也是已知的,这非常有利于我们的计算。

代码演示:

我们从代码情况中可以明显看到,经过sigmoid 函数之后所有的值都在0-1范围内,sigmoid函数的确对数据起到了一个压缩效果。

这里的torch.sigmoid()也可以使用F.sigmoid(),其中F来自于torch.nn.functional as F。

2、Tanh

对Tanh函数进行求导,得到:

代码演示:

应用:RNN 

3、ReLU

 ReLU激活函数是我们使用最多的,因为它的导数非常的简单,在小于0时,为0;在大于0时,为1。相对于Sigmoid激活函数,在一定情况下解决了梯度离散的情况,在现实中,它表现出来的深度学习效果也是非常好的。

对ReLU函数进行求导:

代码演示:

最后的结果,小于零的数值都取值为0,大于零的不改变。但是这个函数怎么对数据进行压缩锕?我们可以通过多个ReLU函数进行叠加,具体可以参考机器学习笔记(持续更新)-CSDN博客,ReLU函数在最后。

 Loss及其梯度

损失函数主要分为均方差损失(Mean Squared Error)、交叉熵损失(Cross Entropy Loss)。

1、MSE(Mean Squared Error)

我们使用一个线性感知机问题讨论MSE。我们来看两种损失函数计算的方式:

将模型(预测值模型)推广到任意模型,将参数统称为\theta,对损失函数进行求导。 

注意:在对w求梯度之前一定要记得对参数进行更新 

(1)利用autograd.grad()求梯度:

不对w进行更新会报错element 0 of tensors does not require grad and does not have a grad_fn

蓝色标记的话就是答案,意思就是将每次的损失添加到总损失中,可以通过添加 requires_grad=True解决问题。以上代码也可以这样写,直接在w初始化时,加入requires_grad=True。

(2)利用backward()求梯度:

2、Cross Entropy Loss

交叉熵损失可以用于二分类问题、多分类问题、逻辑回归。通常使用softmax函数作为激活函数。

softmax函数:

softmax 图像及代码-CSDN博客

这个激活函数经常用来处理分类问题。如上图,我们对这个函数输入2、1、0.1这几个数,经过softmax函数,输出的结果为0.7、0.2、0.1范围都在0-1之间,并且总和为1。而且这个函数还起到强化的作用,在输入方2:1=2,在输出方0.7:0.2=3.5,比原来强的更强、弱的更弱

对于此函数的导数:

在 i = j 的时候大于0,在 i != j 的时候小于0。

代码演示:

a=torch.rand(3)
a.requires_grad_()              # 对a进行更新
p=F.softmax(a,dim=0)
print(p)
print(torch.autograd.grad(p[1],[a],retain_graph=True))
print(torch.autograd.grad(p[2],[a]))                        

为什么需要添加retain_graph=True?我想以下的回答将会为你解答:

 大意就是retain_graph=True不会释放被保存的张量(不会释放中间体),而这些张量在以后计算梯度时将会被用到。导致的结果就是使用backward来计算梯度的次数不能超过一次。

我尝试了多次使用了backward来计算梯度,得到:RuntimeError: Trying to backward through the graph a second time (or directly access saved tensors after they have already been freed). Saved intermediate values of the graph are freed when you call .backward() or autograd.grad(). Specify retain_graph=True if you need to backward through the graph a second time or if you need to access saved tensors after calling backward.

代码演示:

第一次测试

第2次测试:

第3次测试:

第4次测试:

 经过多次测验,我发现上面的回答是不是有问题?因此我又找了一个:

大意就是retain_graph=True非必要不使用。

因此最后的代码应该是:

如果以上内容有什么问题,欢迎指正,I would be grateful。

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

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

相关文章

hyperf 二十八 修改器 一

教程:Hyperf 一 修改器和访问器 根据教程,可设置相关函数,如set属性名Attribute()、get属性名Attribute(),设置和获取属性。这在thinkphp中也常见。 修改器:set属性名Attribute();访问器:get属性名Attri…

从零开始手写RPC框架(番外) Netty基础知识点及常见面试题汇总

目录 Netty 的核心组件Bytebuf(字节容器)Bootstrap 和 ServerBootstrap(启动引导类)Channel(网络操作抽象类)SelectorEventLoop(事件循环)NioEventLoopGroup 默认的构造函数会起多少线程?ChannelHandler(消息处理器) 、 ChannelPipeline(ChannelHandler 对象链表)…

进程控制 | 认识fork函数 | 进程终止 | 进程等待

进程创建 初始fork函数 fork函数是为了创建子进程而生的,通过fork函数之后,我们的父进程的代码和数据是共享的,我们这里是可以通过man手册进行查询的,查询之后是可以发现fork函数是会返回两个值的至于为什么会返回两个值&#x…

牛,The O-one ——通过语音交互控制电脑的开源语言模型

模型介绍 The O-one :一个创新的开源语言模型计算机 可以让你通过语音交互来和你的计算机进行对话,完成询问、指令下达等任务。灵感居然来自Andrej Karpathy 的 LLM 操作系统。O1运行一个代码解释语言模型,并在计算机内核发生特定事件时调用…

社科赛斯考研:二十二载岁月铸辉煌,穿越周期的生命力之源

在考研培训行业的浩瀚海洋中,社科赛斯考研犹如一艘稳健的巨轮,历经二十二载风礼,依然破浪前行。在考研市场竞争白热化与学生对于考研机构要求越来越高的双重影响下,社科赛斯考研却以一种分蘖成长的姿态,扎根、壮大&…

六、C#快速排序算法

简介 快速排序是一种常用的排序算法,它基于分治的思想,通过将一个无序的序列分割成两个子序列,并递归地对子序列进行排序,最终完成整个序列的排序。 其基本思路如下: 选择数组中的一个元素作为基准(pivot…

基于python+vue共享单车信息系统的设计与实现flask-django-php-nodejs

课题主要分为二大模块:即管理员模块和用户模块,主要功能包括:用户、区域、共享单车、单车租赁、租赁归还、报修信息、检修信息等;快速发展的社会中,人们的生活水平都在提高,生活节奏也在逐渐加快。为了节省…

实在智能受邀参加中国人工智能产业发展联盟大会(AIIA)主题分享,共筑智能体机遇新篇章

近日,中国人工智能产业发展联盟(AIIA)在海口召开第十一次全体会议,作为该联盟成员单位,实在智能合伙人&核心算法负责人欧阳小刚受邀出席大会,并以《从RPA到智能体,数字员工的发展及在金融行…

《逆水寒》“公费追星”被骂上热搜,玩家为何如此抗拒剧游联动?

游戏行业最近真是风波不断。 《逆水寒》手游因为和武侠剧《莲花楼》深入联动而遭到玩家抵制,网易游戏测评总监被质疑“公费追星”,还波及到了成毅、陈都灵等多位演员。 尤其是《莲花楼》的男主角成毅,遭到大量《逆水寒》手游玩家的吐槽调侃…

微信向量检索分析一体化数仓探索:OLAP For Embedding

作者:WeOLAP 团队 数据挖掘团队 擅长 OLAP 分析的 ClickHouse 不仅可以用于 vector search,还可承担起整条 embedding 的加工处理工作,All in one Pipeline 也让速度远超传统批处理框架数倍;检索性能虽无法与专业 sim 检索服务相媲美&#xf…

Docker 【安装MongoDB】

文章目录 前言一、安装二、使用三、mongodb常用指令总结 前言 MongoDB是一个非关系型数据库,它主要的应用场景有这些 显示 相比mysql,MongoDB没有事务,索引之类的东西。最小单位是文档。 可能有人说,为什么这个场景我要用mongo…

MO尺度(大气边界层)

在大气表面层( atmospheric surface layer)中,MO参数是用来决定流动是中性或者非中性的一个重要参数。其定义是 z / L z/L z/L,其中 L L L为Obukhov长度,其含义是浮力产生的湍动能和剪切产生的湍动能之比(Hj h AIP 2023)(Monin IAS,1954),具体…

文件怎么做扫码预览?创建文件活码的步骤有哪些?

现在文件可以通过扫描二维码的方式来获取,与传统的通过聊天软件来传输相比,二维码方式的应用更加的方便,其他人只需要通过扫描一张二维码就可以在手机上浏览或者下载文件,通过手机就可以预览、存储。 文件二维码的制作方法也很简…

“龙腾九洲———孙文佳师生书画作品国际交流展”首展成功举行

应美国纽约罗切斯特大学、美国满煜国际文化艺术交流公司的邀请,“龙腾九洲———孙文佳师生书画作品国际交流展”首展开幕式于2024年1月23日上午12时在美国纽约罗切斯特大学西蒙商学院会展中心举行。 开幕式上,罗切斯特大学负责人Priya和美国满煜文化公司…

第1讲-introduction(4)ALU

ALU(Arithmetic and logic unit) ALU的核心部件是加法器。 算术逻辑单元(Arithmetic Logic Unit,简称 ALU)是中央处理器(CPU)的执行单元,是所有中央处理器的核心组成部分。它负责执行所有的算术和逻辑运算,例如加减乘除、与或非等操作。 ALU的主要功能包括: 1. 执…

重学SpringBoot3-Profiles介绍

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-Profiles介绍 Profiles简介如何在Spring Boot中使用Profiles定义Profiles激活ProfilesIDEA设置active profile使用Profile-specific配置文件 条件化Bean…

Unity-UGUI系统

UGUI是什么 UGUI是Unity引擎内自带的UI系统官方称之为:Unity Ul 是目前Unity商业游戏开发中使用最广泛的UI系统开发解决方案 它是基于Unity游戏对象的UI系统,只能用来做游戏UI功能 不能用于开发Unity编辑器中内置的用户界面 六大基础组件 概述 Canvas EventS…

想做【数据分析师】?需要什么条件?

进入数据时代,数据分析师成为各大企业争先抢夺的主要人才之一。数据分析师是在不同行业中,专门从事行业数据收集、整理、分析并且依据相关的数据做出行业研究、评估和预测的专业人员。那做数据分析师需要满足什么条件呢? 首先我们要看一下数据…

性能测试如何定位分析性能瓶颈?

对于一般公司普通测试工程师来说,可能性能测试做的并不是很复杂,可能只是编写下脚本,做个压测,然后输出报告结果,瓶颈分析和调优的事都丢给开发去做。 在一些大厂都有专门的性能测试团队去定位分析系统性能瓶颈&#…

流畅切换Linux的应用程序

流畅切换Linux的应用程序 流畅切换Linux的应用程序一.Linux启动一个程序在后台执行1. 使用nohup和&:2. 使用ctrlZ:3.使用screen:3.1 创建会话3.2 要重新连接到此会话:3.3 中途退出会话,但程序继续运行:3.4 结束一个…