pytorch学习笔记(七)——loss及其梯度

pytorch学习笔记(七)——loss及其梯度

目录

典型loss

在这里插入图片描述
典型的loss有两种,第一种是均方差简称MSE。
第二种是用于分类的误差交叉熵,既可以用于二分类问题,也可以用于多分类问题。一般最后的输出要通过softmax函数,第二种loss我们放在之后的博客中讲解。

MSE

(1)MSE定义
在这里插入图片描述
为方便,我们下面讲解MSE不再除以数据个数
(2)MSE求导
在这里插入图片描述
(3)pytorch对MSE自动求导
两种求导方法:
在这里插入图片描述
方法一:autograd.grad,输入loss,和要显示信息的参数,返回参数梯度list
在这里插入图片描述
用pytorch自带的函数mse_loss求均方差,传入的值分别为真实值和预测值。autograd.grad函数对变量进行求导,参数一输入loss,参数二输入loss中的参数。由于一开始没有说明需要记录w的求导信息,所以报错。需要加上函数w.requires_grad_,或者在一开始声明w变量时,w=torch.tensor([1],requires_grad=True),继续执行代码仍然报错,原因是因为参数尽管参数声明需要记录求导信息,但是计算图并没有更新,再次运行一次mse_loss函数更新计算图,最后得到想要的结果。
方法二:backward自动求导 参数梯度信息记录在成员变量grad中
在这里插入图片描述

softmax激活函数

(1)softmax定义
在这里插入图片描述
softmax函数一般用于最后的输出,神经网络的输出最后经过softmax函数使得输出的结果求和为1,范围都在0-1之间,非常符合概率的特点。同时观察上图我们可以看到,输入2,1输出0.7,0.2,他们之间的差距从两倍变成了3.5倍,因softmax函数可以把差距变大,大的更大,小的更加密集。
(2)softmax求导
在这里插入图片描述
假设有n个输出a1,a2…aj,经过以上公式得到最终的输出,分别对应p1,p2…pi
1.当i=j时pi对aj的导数公式推导
在这里插入图片描述
2.当i!=j时pi对aj的导数公式推导
在这里插入图片描述
3.公式合并
在这里插入图片描述
(3)softmax的pytorch实现
在这里插入图片描述
报错原因:默认 retain_graph=False,也就是反向传播之后这个计算图的内存会被释放,这样就没办法进行第二次反向传播了,所以我们需要设置为 retain_graph=True。

在输入代码34下面图中漏写了一句backward函数,因此执行到代码35时其实是执行了两次backward函数,由于第一次retain_graph默认设置为false,经过一次后向传播后计算图内存被清楚所以再次调用backward函数会报错,输出的p是list[p1,p2,p3]所以传入grad函数不能直接传入p,a是list[a1,a2,a3],一次求pi三个参数的梯度,所以返回三个梯度值,在上面的学习中我们知道,i=j时梯度值为正,其余为负,从结果中得到很好的验证。

Pytorch是机器学习中的一个重要框架,它与TensorFlow一起被认为是机器学习的两大框架。Pytorch学习可以从以下几个方面入手: 1. Pytorch基本语法:了解Pytorch的基本语法和操作,包括张量(Tensors)的创建、导入torch库、基本运算等\[2\]。 2. Pytorch中的autograd:了解autograd的概念和使用方法,它是Pytorch中用于自动计算梯度的工具,可以方便地进行反向传播\[2\]。 3. 使用Pytorch构建一个神经网络:学习使用torch.nn库构建神经网络的典型流程,包括定义网络结构、损失函数、反向传播和更新网络参数等\[2\]。 4. 使用Pytorch构建一个分类器:了解如何使用Pytorch构建一个分类器,包括任务和数据介绍、训练分类器的步骤以及在GPU上进行训练等\[2\]。 5. Pytorch的安装:可以通过pip命令安装Pytorch,具体命令为"pip install torch torchvision torchaudio",这样就可以在Python环境中使用Pytorch了\[3\]。 以上是一些关于Pytorch学习笔记,希望对你有帮助。如果你需要更详细的学习资料,可以参考引用\[1\]中提到的网上帖子,或者查阅Pytorch官方文档。 #### 引用[.reference_title] - *1* [pytorch自学笔记](https://blog.csdn.net/qq_41597915/article/details/123415393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Pytorch学习笔记](https://blog.csdn.net/pizm123/article/details/126748381)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值