pytorch教程龙曲良26-30

26什么是梯度1

导数(在给定方向的变化量)和偏微分(在给定的自变量上的变化量)都是标量,只有大小没有方向
梯度就是所有偏微分的向量,有方向有大小
在这里插入图片描述
函数梯度是一个向量,向量方向表示这个函数在当前点的一个增长方向,向量的模/长度表示增长速率
在这里插入图片描述
这里的a是lr,这里初始化(0,0)刚好取到极小值
在这里插入图片描述
当lr太大的话会更新太快跳到箭头所指的地方,显然不是我们想要的情况
在这里插入图片描述

在这里插入图片描述

27什么是梯度2

总是有z1>z2,就是凸函数(碗一样),可以找到全局最优解,但是这种情况在现实中不常见
在这里插入图片描述
存在多个局部最小值
在这里插入图片描述
resnet56
网络很深可能平面会很粗糙陷入局部最小值,resnet56加了shortcut(走捷径)使得平面变得光滑,这样可以找到全局最小值
在这里插入图片描述
陷入鞍点
不是最大值也不是最小值,或者在x维度取局部最小值,在y维度上取局部最大值,比搜索到局部最小值更可怕,可能就陷在鞍点在这里插入图片描述
Optimizer Performance哪些因素会影响搜索全局最小值的过程
▪ initialization status
▪ learning rate
▪ momentum#动量 怎么逃离局部最小值
▪ etc.

initialization status
图一初始状态从左边开始,找到局部最小值;
初始状态从右边开始,找到全局最小值,而且二者搜索的步数也不同
初始化可以按照主流的初始化方法,何恺明初始方法

在这里插入图片描述
在这里插入图片描述

learning rate
lr太大 ,即步长太大可能会直接跨过最小值跨到另一边去,这样可能不收敛,所以lr要设置小一点,0.01,0.001,如果收敛可以大一点这样收敛速度快一点。lr不仅影响速度还影响精度,lr过大可能会使得在最小值附近震荡,不能达到最小值,所以应该设置再小一点
在这里插入图片描述

momentum
逃出局部最小值

可能会在一个小坑里徘徊但是如果惯性够大就可以冲出去,到达更小的坑去
在这里插入图片描述

28常见函数的梯度

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
单层感知机在这里插入图片描述
在这里插入图片描述

29激活函数与loss的梯度1

问题:单层感知机激活函数不可导
在这里插入图片描述
sigmoid/logistic
在这里插入图片描述
sigmoid函数的求导,可以求出一个其对x的导数,且其连续光滑,把负无穷到正无穷的值压缩在0-1之间,如概率和RGB像素点。问题是:趋向正无穷,导数接近于0,loss的值长时间得不到更新,梯度离散。
在这里插入图片描述

在这里插入图片描述

torch.nn.function as F

在这里插入图片描述
Tanh[-1,1]
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
Relu
非常适合做deep learning,所以都优先使用relu函数
因为x>0 梯度是1

保持梯度不变,减少出现梯度离散或梯度爆炸的情况
在这里插入图片描述
在这里插入图片描述

30激活函数与loss的梯度2

Typical Loss
▪ Mean Squared Error

▪ Cross Entropy Loss
▪ binary
▪ multi-class
▪ +softmax
▪ Leave it to Logistic Regression Part
在这里插入图片描述
如果使用torch.norm的函数要要这样使用(因为其默认是L2-norm,有开方),要加一个平方:torch.norm(y-pred,2).pow(2)
在这里插入图片描述
在这里插入图片描述
w初始化为一个长度为1 ,维度为1,值为2的一个tensor
在这里插入图片描述

 import torch
import torch.nn.functional as F
x=torch.ones(1)#标量
#w=torch.full([1],2)#长度为1且维度为1的张量 这样写默认w不需要求梯度
w=torch.tensor([2.0],requires_grad=True)
mse=F.mse_loss(torch.ones(1),x*w)#pred初始化为1
#loss=(pred-y)**2对这个函数的投递求导, 即2(pred-y)*loss对w的求导,即2(pred-y)x(-1)
#x=1 w=2,所以求导结果2(1-1*2)*1*(-1)=2
b=torch.autograd.grad(mse,[w])
print(b)#(tensor([2.]),)

backward会记录这个图的所有路径,在最后结点调用backward会自动的从后往前传播,完成这条路上所有需要梯度的计算,会把这些梯度信息附加每个tensor的成员.grad上 如w.grad和b.grad

注意要区分w.norm()还是w.grad.norm()在这里插入图片描述
torch.autograd.grad()返回的是各个w的梯度的列表
loss.backward() 可是直接指定wi.grad

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: pytorch-multi-label-classifier-master是一个基于PyTorch的多标签分类器项目。该项目旨在使用PyTorch框架构建一个能够对具有多个标签的数据样本进行分类的模型。 PyTorch是一个流行的深度学习框架,能够实现多种深度学习模型的构建与训练。它提供了丰富的工具和函数,简化了模型的复杂性,并提供了高效的计算能力。 在这个项目中,multi-label指的是数据样本可以被分为多个标签。与传统的单标签分类不同,每个样本可以被分为多个类别,这增加了分类问题的复杂性。模型需要学习如何给每个样本分配正确的标签。 pytorch-multi-label-classifier-master项目提供了一个设置多标签分类模型的基础架构。它包含了数据预处理、模型构建、训练和评估等步骤。用户可以根据自己的数据集和需求,对该项目进行定制。 通过使用pytorch-multi-label-classifier-master项目,用户可以快速搭建一个多标签分类器,用于解决具有多个标签的数据分类问题。同时,该项目还提供了一些示例数据和模型,帮助用户更好地理解和使用多标签分类技术。 总而言之,pytorch-multi-label-classifier-master是一个基于PyTorch框架用于多标签分类的项目,为用户提供了一个简单且灵活的搭建多标签分类器的框架,方便用户解决多标签分类问题。 ### 回答2: pytorch-multi-label-classifier-master是一个基于PyTorch的多标签分类器项目。它提供了一种使用神经网络模型来处理多标签分类任务的解决方案。 该项目的主要目标是通过深度学习技术来提高多标签分类问题的准确度。它使用PyTorch作为深度学习框架,该框架提供了丰富的工具和功能来构建和训练神经网络模型。 在pytorch-multi-label-classifier-master中,你可以找到许多工具和函数来进行数据预处理、模型构建、训练和评估。它支持常见的多标签分类算法,如卷积神经网络(CNN)和递归神经网络(RNN)。你可以根据自己的需求选择合适的模型,并通过简单的配置来进行训练。 该项目还提供了一些示例数据集和预训练模型,以帮助你更快地开始。你可以使用这些数据集来测试和调试你的模型,或者使用预训练模型来进行迁移学习。 pytorch-multi-label-classifier-master还支持一些常见的性能评估指标,如准确率、精确率、召回率和F1值。你可以使用这些指标来评估你的模型在多标签分类任务上的性能。 总的来说,pytorch-multi-label-classifier-master是一个方便易用的项目,旨在帮助你构建和训练用于多标签分类的深度学习模型。它提供了丰富的功能和工具,使你能够快速搭建一个准确度较高的多标签分类器。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值