Week1:[任务三] 第二节 autograd与逻辑回归

2023-11-20 12:50

本文主要是介绍Week1:[任务三] 第二节 autograd与逻辑回归,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【目录】

  • 自动求导系统

  • 逻辑回归 

1、自动求导系统

  • torch.autograd.backward()方法

张量中的y.backward方法实际调用的是torch.autograd.backward()方法

同一个张量反向传播的迭代,需要将y.backward(retain_graph)设置为True

  • tensors为用于求导的张量,如loss;loss.background(),用于对requires_grad为true的叶子节点进行梯度自动求解;
  • retain_graph用于保存计算图,因为pytorch为动态图机制,每次自动求导运算后都会释放掉,如果想要迭代使用计算图,需要将其置为true;
  • create_graph创建导数的计算图,通常用于高阶求导,如二阶、三阶;
  • grad_tensors:多梯度权重设置,当有多个loss需要计算梯度时,需要设置各个loss的权重;

# retain_graph用处不多,一般迭代计算梯度,将loss表达式和loss.back一同放入for循环中即可

# ====================================== retain_graph ==============================================
flag = True
# flag = False
if flag:w = torch.tensor([1.], requires_grad=True)x = torch.tensor([2.], requires_grad=True)a = torch.add(w, x)b = torch.add(w, 1)y = torch.mul(a, b)y.backward(retain_graph=True)print(w.grad)y.backward(retain_graph=True)print(w.grad)

# grad_tensors多权重求梯度

#多权重求loss梯度
import torchw = torch.tensor([1.],requires_grad = True)
x = torch.tensor([2.],requires_grad = True)a = torch.add(w,x)
b = torch.add(w,1)
y0 = torch.mul(a,b)
y1 = torch.add(a,b)loss = torch.cat([y0,y1],dim = 0)#拼接
print(loss)
grad_tensors = torch.tensor([1.,1.])loss.backward(gradient = grad_tensors)#y0对w的梯度*权重+y1对w的梯度*权重
print(w.grad)#运行结果输出
runfile('C:/Users/cheny/Desktop/untitled0.py', wdir='C:/Users/cheny/Desktop')
tensor([6., 5.], grad_fn=<CatBackward>)
tensor([7.])
  • torch.autograd.grad()方法

output为Y,input为X,求取的是Y对X的偏导,即求X的梯度

下划线表示原地操作in-place操作,在原始地址上直接进行改变,例如a+=1,a的地址没有变化

#求高阶导数,create_graph = True设置
import torch
x = torch.tensor([3.],requires_grad=True)
y = torch.pow(x,2)#y=x²grad_1 = torch.autograd.grad(y,x,create_graph=True)#一阶导数为y=2x=6
print(grad_1)grad_2 = torch.autograd.grad(grad_1[0],x)#二阶导数为y=2
print(grad_2)#运行结果输出
runfile('C:/Users/cheny/Desktop/untitled0.py', wdir='C:/Users/cheny/Desktop')
(tensor([6.], grad_fn=<MulBackward0>),)
(tensor([2.]),)

叶子张量不能执行in-place操作,因为前向传播保存的地址数据不能有变化,否则反向传播会出错

注意:

  • 梯度在自动求导过程中不会自动清零,每次都会自动叠加上去,需要手动清零。e.g w.grad.zero_()进行清零
  • 依赖于叶子结点的结点,requires_grad默认为True(是否需要梯度)
  • 叶子结点不可执行in-place
#梯度不会自动清零,需要手动清零
import torchw = torch.tensor([1.],requires_grad = True)
x = torch.tensor([2.],requires_grad = True)for i in range(2):a = torch.add(w,x)b = torch.add(w,1)y = torch.mul(a,b)y.backward()print(w.grad)#w.grad.zero_() #手动清空#运行结果输出
runfile('C:/Users/cheny/Desktop/untitled0.py', wdir='C:/Users/cheny/Desktop')
tensor([5.])
tensor([10.])

2、逻辑回归

  • sigmoid函数的作用就是将输入的数据映射到0-1之间,输出的Y就能用来做二分类

  • 逻辑回归是在线性回归的基础上增加了一个激活函数,增加激活函数是为了更好的描述,用概率来描述,同时更好的拟合,避免梯度消失现象

  • 逻辑回归又叫对数几率回归,几率即为y/1-y(概率取值y除以1-y)表示样本x为正样本的可能性。线性回归用wx+b去拟合Y,而逻辑回归是用wx+b去拟合一个对数几率

  • 机器学习训练步骤(五步)

这篇关于Week1:[任务三] 第二节 autograd与逻辑回归的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394718

相关文章

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

FreeRTOS学习笔记(二)任务基础篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、 任务的基本内容1.1 任务的基本特点1.2 任务的状态1.3 任务控制块——任务的“身份证” 二、 任务的实现2.1 定义任务函数2.2 创建任务2.3 启动任务调度器2.4 任务的运行与切换2.4.1 利用延时函数2.4.2 利用中断 2.5 任务的通信与同步2.6 任务的删除2.7 任务的通知2

Flink任务重启策略

概述 Flink支持不同的重启策略,以在故障发生时控制作业如何重启集群在启动时会伴随一个默认的重启策略,在没有定义具体重启策略时会使用该默认策略。如果在工作提交时指定了一个重启策略,该策略会覆盖集群的默认策略默认的重启策略可以通过 Flink 的配置文件 flink-conf.yaml 指定。配置参数 restart-strategy 定义了哪个策略被使用。常用的重启策略: 固定间隔 (Fixe

第49课 Scratch入门篇:骇客任务背景特效

骇客任务背景特效 故事背景:   骇客帝国特色背景在黑色中慢慢滚动着! 程序原理:  1 、 角色的设计技巧  2 、克隆体的应用及特效的使用 开始编程   1、使用 黑色的背景: ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7d74c872f06b4d9fbc88aecee634b074.png#pic_center)   2

逻辑表达式,最小项

目录 得到此图的逻辑电路 1.画出它的真值表 2.根据真值表写出逻辑式 3.画逻辑图 逻辑函数的表示 逻辑表达式 最小项 定义 基本性质 最小项编号 最小项表达式   得到此图的逻辑电路 1.画出它的真值表 这是同或的逻辑式。 2.根据真值表写出逻辑式   3.画逻辑图   有两种画法,1是根据运算优先级非>与>或得到,第二种是采

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

AsyncTask 异步任务解析

1:构建AsyncTask 子类的回调方法: A:doInBackground:   必须重写,所有的耗时操作都在这个里面进行; B: onPreExecute:     用户操作数据前的调用; 例如:显示一个进度条 等 ; C: onPostExecute:    当doInBackground 执行完成后;会自动把数据传给onPostExecute方法;也就是说:这个方法是处理返回的数据的方法

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

使用Node-API进行异步任务开发

一、Node-API异步任务机制概述         Node-API异步任务开发主要用于执行耗时操作的场景中使用,以避免阻塞主线程,确保应用程序的性能和响应效率。         1、应用场景: 文件操作:读取大型文件或执行复杂的文件操作时,可以使用异步工作项来避免阻塞主线程。网络请求:当需要进行网络请求并等待响应时,可以使用异步工作项来避免阻塞主线程,从而提高应用程序的响应性能。数据库操

探索Invoke:Python自动化任务的瑞士军刀

文章目录 探索Invoke:Python自动化任务的瑞士军刀背景:为何选择Invoke?`invoke`是什么?如何安装`invoke`?简单的`invoke`库函数使用方法场景应用:`invoke`在实际项目中的使用场景一:自动化测试场景二:代码格式化场景三:部署应用 常见问题与解决方案问题一:命令执行失败问题二:权限不足问题三:并发执行问题 总结 探索Invoke:P