当前位置: 首页 > news >正文

从 X 入门Pytorch——Tensor的自动微分、计算图,常见的with torch.no_grad()机制

这里写目录标题

    • 1 Pytorch计算图和自动微分
    • 2 将单个数据从计算图中剥离 .detach
    • 3 使用with torch.go_grad(): 包含的代码段不会计算微分

1 Pytorch计算图和自动微分

从功能上理解:
计算图就是类似于数据结构中的无环有向图,Pytorch中的计算图就是为了记录一个数据从开始到最后所作的操作和参数,这样在进行反向传播时候(backward),就会有足够的参数去计算梯度,得到最终值相较于操作过程中数据梯度,之后再通过优化器(optimizer.step()),对目标函数进行优化,就几乎完成了一轮模型训练的目的。

将Tensor的requires_grad属性设置为True时,Pytorch的torch.autograd会自动地追踪它的计算轨迹当需要计算微分的时候,只需要对最终计算结果的Tensor调用backward方法中间所有计算节点的微分就会被保存在grad属性中

import torchx = torch.arange(9, dtype=torch.float).view(3,3)
print("x默认不缓存计算轨迹:",x, x.requires_grad)
y = torch.randn(3,3, requires_grad=True)
print("y设置requires_grad属性:",y, y.requires_grad)
z = torch.sum(torch.mm(x, y))
z.backward()
print("得到Z:", z, z.requires_grad)
print("经过计算,未保留x的梯度:", x.grad)
print("经过计算,保留了y的梯度:", y.grad)out:
x默认不缓存计算轨迹: tensor([[0., 1., 2.],[3., 4., 5.],[6., 7., 8.]]) False
y设置requires_grad属性: tensor([[-0.2810, -2.7142,  1.8053],[-0.6549,  1.0730, -1.9470],[ 0.5629, -0.0692, -0.7376]], requires_grad=True) True
得到Z: tensor(-32.7122, grad_fn=<SumBackward0>) True
经过计算,未保留x的梯度: None
经过计算,保留了y的梯度: tensor([[ 9.,  9.,  9.],[12., 12., 12.],[15., 15., 15.]])

从上面可以看出,y设置了requires_grad为True时,在计算过后,Pytorch会缓存其梯度信息,而x为设置该属性,即未保存该梯度信息。

汇总:

Tensor属性作用
针对Tensor构造时的属性后期也可以输出查看
device该节点运行的设备环境,即CPU/GPU
requires_grad自动微分机是否需要对该节点求导,缺省为False
针对Tensor输出时的属性,构造时不可指定用来输出查看
grad输出节点对该节点的梯度,缺省为None
grad_fn中间计算节点关于全体输入节点的映射,记录了前向传播经过的操作。叶节点为None
is_leaf该节点是否为叶节点

当需要计算中间数据(x)的梯度时,只需要将最后的结果值进行backward()后,再打印x.grad即可

2 将单个数据从计算图中剥离 .detach

一般在模型训练中计算评价指标时,我们需要停止数据的计算轨迹缓存,则可以使用.detach将数据从计算图中剥离出去,这个是针对单个数据的。

import torch
x = torch.rand(3, 3, requires_grad=True)
w = torch.ones(3, 3, requires_grad=True)
print(x)
print(w)
yy = torch.mm(w, x)
print(yy.requires_grad)detach_yy = yy.detach()  #一般模型中使用loss计算评价指标时,都会用类似这样的式子将loss从计算图中剥离备份出去。
y = torch.sum(yy)
y.backward()print("进行剥离后,detach_yy的属性:", detach_yy.grad)
print("x的梯度缓存:", x.grad)
print("w的梯度缓存:", w.grad)out:
tensor([[0.8037, 0.2443, 0.3994],[0.9879, 0.9484, 0.4035],[0.3057, 0.6682, 0.4186]], requires_grad=True)
tensor([[1., 1., 1.],[1., 1., 1.],[1., 1., 1.]], requires_grad=True)
True
进行剥离后,detach_yy的属性: None
x的梯度缓存: tensor([[3., 3., 3.],[3., 3., 3.],[3., 3., 3.]])
w的梯度缓存: tensor([[1.4474, 2.3398, 1.3925],[1.4474, 2.3398, 1.3925],[1.4474, 2.3398, 1.3925]])

3 使用with torch.go_grad(): 包含的代码段不会计算微分

想必这个在模型测试阶段大家都会用,之所以用这个,是将模型测试阶段的微分不计算在模型中,否则模型把测试集都学过了,那以后拿什么进行模型评价呢?

import torch
x = torch.rand(3, 3, requires_grad=True)
w = torch.ones(3, 3, requires_grad=True)
y = torch.sum(torch.mm(w, x))
print("正常缓存梯度信息:", y.requires_grad)with torch.no_grad():y = torch.sum(torch.mm(w, x))print("在with torch.no_grad中:", y.requires_grad)out:
正常缓存梯度信息: Truewith torch.no_grad中: False

相关文章:

从 X 入门Pytorch——Tensor的自动微分、计算图,常见的with torch.no_grad()机制

这里写目录标题1 Pytorch计算图和自动微分2 将单个数据从计算图中剥离 .detach3 使用with torch.go_grad(): 包含的代码段不会计算微分1 Pytorch计算图和自动微分 从功能上理解&#xff1a; 计算图就是类似于数据结构中的无环有向图&#xff0c;Pytorch中的计算图就是为了记录…...

三十七、实战演练之接口自动化平台的文件上传

上传文件功能 上传文件功能主要针对需要测试上传文件的接口。原理是&#xff0c;把要测试上传的文件先上传到测试平台&#xff0c;然后把路径写入 用例中&#xff0c;后台真正测试时再将其进行上传。 一、上传文件模型 在testplans/models.py 模块中编写如下模型&#xff1a;…...

菜鸟刷题Day1

菜鸟刷题Day1 一.自守数&#xff1a;自守数_牛客题霸_牛客网 (nowcoder.com) 描述 自守数是指一个数的平方的尾数等于该数自身的自然数。例如&#xff1a;25^2 625&#xff0c;76^2 5776&#xff0c;9376^2 87909376。请求出n(包括n)以内的自守数的个数 解题思路&#x…...

cjson文件格式介绍

cjson是一种轻量级的JSON解析库&#xff0c;它支持将JSON格式的数据转换为C语言中的数据结构&#xff0c;同时也支持将C语言中的数据结构转换为JSON格式的数据。cjson的文件格式是指在使用cjson库时&#xff0c;将JSON格式的数据存储在文件中&#xff0c;然后通过cjson库读取文…...

【Nginx二】——Nginx常用命令 配置文件

Nginx常用命令 配置文件常用命令启动和重启 Nginx配置文件maineventshttp常用命令 安装完成nginx后&#xff0c;输入 nginx -&#xff1f;查询nginx命令行参数 nginx version: nginx/1.22.1 Usage: nginx [-?hvVtTq] [-s signal] [-p prefix][-e filename] [-c filename] [-…...

3月最新!AIGC公司生态地图;开发者实用ChatGPT工具清单;上手必会的SD绘图教程;字幕组全自动化流程大公开 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 『光年之外诚邀产品经理加入』古典产品经理的复兴&#xff01; 光年之外创始人王慧文在社交平台发帖&#xff0c;公布联合创始人团队基…...

python - 递归函数

递归函数 什么是递归 在函数内部&#xff0c;可以调用其他函数。如果一个函数在内部调用自身本身&#xff0c;这个函数就是递归函数 递归函数必须有一个明确的结束条件每进入更深一层的递归时&#xff0c;问题规模相对于上一次递归都应减少相邻两次重复之间有紧密的联系&…...

ring_log环形日志-6M缓冲区_proc接口

文章目录log_tools.clog.cspin_lockseq_putsseq_readseq_writesingle_openmakefiletest.sh测试&#xff1a;运行./test.sh读取日志插入日志echo cat测试参考&#xff1a;log_tools.c #include <stdlib.h> #include <stdio.h> #include <sys/types.h> #includ…...

Linux内核进程管理几种CPU调度策略

CPU调度我们知道&#xff0c;程序需要获得CPU的资源才能被调度和执行&#xff0c;那么当一个进程由于某种原因放弃CPU然后进入阻塞状态&#xff0c;下一个获得CPU资源去被调度执行的进程会是谁呢&#xff1f;下图中&#xff0c;进程1因为阻塞放弃CPU资源&#xff0c;此时&#…...

SpringBoot整合Flink(施耐德PLC物联网信息采集)

SpringBoot整合Flink&#xff08;施耐德PLC物联网信息采集&#xff09;Linux环境安装kafka前情&#xff1a;施耐德PLC设备&#xff08;TM200C16R&#xff09;设置好信息采集程序&#xff0c;连接局域网&#xff0c;SpringBoot订阅MQTT主题&#xff0c;消息转至kafka&#xff0c…...

DFS(深度优先搜索)和BFS(宽度优先搜索)

目录 DFS&#xff08;深度优先搜索&#xff09; 全排列的DFS解法 利用DFS递归构建二进制串和递归树的结构剖析 DFS--剪枝 DFS例题--整数划分 BFS(宽度优先搜索) 全排列的BFS解法 DFS&#xff08;深度优先搜索&#xff09; 深度优先搜索&#xff08;Depth First Search&…...

Redis缓存穿透、击穿、雪崩问题及解决方法

系列文章目录 Spring Cache的使用–快速上手篇 分页查询–Java项目实战篇 全局异常处理–Java实战项目篇 完善登录功能–过滤器的使用 上述只是部分文章&#xff0c;对该系列文章感兴趣的可以查看我的主页哦 文章目录系列文章目录前言一、缓存穿透1.1 问题引入1.2 解决方法1.…...

HAL库 STM32 串口通信

一、实验条件将STM32的PA9复用为串口1的TX&#xff0c;PA10复用为串口1的RX。STM32芯片的输出TX和接收RX与CH340的接收RX和发送TX相连&#xff08;收发交叉且PCB上默认没有相连&#xff0c;所以需要用P3跳线帽进行手动连接&#xff09;&#xff0c;CH340的另一端通过USB口引出与…...

2023-第十四届蓝桥杯冲刺计划!

&#x1f4ac;前言 &#x1f4a1;本文以目录形式列举大纲,可根据题目点击跳转 &#x1f308;冲刺阶段目的&#xff1a;把握高频重点,结合基础算法和常考题型总结,用真题进行模拟练习 根据自己的能力熟练目前已掌握的算法&#xff0c;不会的还可以暴力 ⏳最后三个星期大家一起冲…...

内网渗透基础知识

一、内网概述 内网也指局域网&#xff0c;是指在某一区域内又多台计算机互联成的计算机组。一般是方圆几千米内&#xff0c;局域网可以实现文件管理&#xff0c;应用软件共享&#xff0c;打印机共享&#xff0c;工作组内的历程安排&#xff0c;电子邮件和传真通信服务等功能。…...

鸟哥的Linux私房菜 正则表示法与文件格式化处理

第十一章、正则表示法与文件格式化处理 https://linux.vbird.org/linux_basic/centos7/0330regularex.php 简体版 http://cn.linux.vbird.org/linux_basic/0330regularex.php 11.2.2 grep的一些高级选项 例题一、搜索特定字符串 例题二、利用中括号 [] 来搜寻集合字符 例题四…...

1630.等差子数组

1630. 等差子数组 难度中等 如果一个数列由至少两个元素组成&#xff0c;且每两个连续元素之间的差值都相同&#xff0c;那么这个序列就是 等差数列 。更正式地&#xff0c;数列 s 是等差数列&#xff0c;只需要满足&#xff1a;对于每个有效的 i &#xff0c; s[i1] - s[i] …...

CSS 属性计算过程

CSS 属性计算过程 你是否了解 CSS 的属性计算过程呢&#xff1f; 有的同学可能会讲&#xff0c;CSS属性我倒是知道&#xff0c;例如&#xff1a; p{color : red; }上面的 CSS 代码中&#xff0c;p 是元素选择器&#xff0c;color 就是其中的一个 CSS 属性。 但是要说 CSS 属…...

ThinkPHP02:路由

ThinkPHP02&#xff1a;路由一、路由定义二、变量规则三、路由地址四、路由参数五、路由分组六、MISS七、资源路由八、注解路由九、URL生成一、路由定义 路由默认开启&#xff0c;在 config/app.php 中可以关闭路由。 路由配置在 config/route.php 中&#xff0c;路由定义在 r…...

制作简单进销存管理系统(C#)

实验三&#xff1a;制作简单进销存管理系统 任务要求&#xff1a; 在进销存管理系统中&#xff0c;商品的库存信息有很多种类&#xff0c;比如商品型号、商品名称、商品库存量等。在面向对象编程中&#xff0c;这些商品的信息可以存储到属性中&#xff0c;然后当需要使用这些…...

智慧生鲜配送:揭秘生鲜配送商城APP功能版块设计

在数字化消费浪潮中&#xff0c;生鲜配送商城APP成为居民采购食材的重要渠道。其功能版块设计聚焦用户需求&#xff0c;通过智能化、便捷化的操作体验&#xff0c;打造高效生鲜购物场景。以下揭秘其核心功能玩法&#xff0c;解析如何实现“从指尖到餐桌”的流畅服务。一、首页&…...

Dlib零基础避坑指南:Windows Python环境一键部署实战

Dlib零基础避坑指南&#xff1a;Windows Python环境一键部署实战 【免费下载链接】Dlib_Windows_Python3.x Dlib compiled binary (.whl) for Python 3.7-3.11 and Windows x64 项目地址: https://gitcode.com/gh_mirrors/dl/Dlib_Windows_Python3.x 副标题&#xff1a;…...

临近起飞,在哪个平台更容易捡漏特价机票?2026年实测指南

“机票越临近起飞越便宜”——这个说法你一定听过。每逢假期临近&#xff0c;总有人在社交媒体上分享自己“起飞前两小时抢到白菜价机票”的神奇经历。但当你真的想在清明、五一出行前“赌一把”时&#xff0c;往往发现价格不仅没降&#xff0c;反而翻倍了。那么问题来了&#…...

Leetcode 数据结构刷题 ->链表1

[27. 移除元素]移除等于所给值的元素&#xff0c;我们可以直接使用双指针&#xff0c;对着来的。关键就是把不等于x的值&#xff08;我改一下&#xff0c;没用val&#xff09;&#xff0c;放到后面去&#xff0c;这样前面就全部都是不等于x值&#xff0c;再计数即可。看代码就对…...

如何守护.NET应用源代码安全?Obfuscar开源混淆方案深度解析

如何守护.NET应用源代码安全&#xff1f;Obfuscar开源混淆方案深度解析 【免费下载链接】obfuscar Open source obfuscation tool for .NET assemblies 项目地址: https://gitcode.com/gh_mirrors/ob/obfuscar 在数字化时代&#xff0c;.NET应用程序面临着严峻的源代码安…...

MCP3202 12位SPI ADC驱动开发与嵌入式工程实践

1. MCP3202 12位串行ADC嵌入式驱动深度解析与工程实践1.1 芯片特性与系统定位MCP3202 是 Microchip 推出的低功耗、逐次逼近型&#xff08;SAR&#xff09;12位模数转换器&#xff0c;专为嵌入式系统中高精度模拟信号采集场景设计。其核心电气特性如下&#xff1a;参数规格工程…...

从YOLOv5到YOLOv8:停车位检测模型演进与实战性能对比

1. YOLO系列模型的技术演进路径 YOLO&#xff08;You Only Look Once&#xff09;系列模型作为目标检测领域的标杆算法&#xff0c;从2015年诞生至今已经经历了多次重大迭代。每次版本更新都带来了显著的性能提升和架构创新&#xff0c;这使得YOLO系列在实时目标检测任务中始终…...

ABC系统实战指南:革新数字电路设计的逻辑综合与形式验证技术突破

ABC系统实战指南&#xff1a;革新数字电路设计的逻辑综合与形式验证技术突破 【免费下载链接】abc ABC: System for Sequential Logic Synthesis and Formal Verification 项目地址: https://gitcode.com/gh_mirrors/ab/abc 在现代集成电路设计流程中&#xff0c;工程师…...

Python从入门到精通(第08章):列表、元组、集合与字典

Python从入门到精通(第08章):列表、元组、集合与字典 开头导语 这是本系列第08章。本文采用"知识点讲解 + 错误示例 + 正确写法 + 自测清单"的结构,目标是让你不仅能看懂,还能独立写出可运行代码。建议你边看边敲,所有示例都亲自执行一次。 章节摘要 本章围…...

如何控制Rainmeter皮肤背景视频的有限循环播放次数

如何控制Rainmeter皮肤背景视频的有限循环播放次数 【免费下载链接】rainmeter Desktop customization tool for Windows 项目地址: https://gitcode.com/gh_mirrors/ra/rainmeter Rainmeter作为一款强大的Windows桌面自定义工具&#xff0c;允许用户通过皮肤实现丰富的…...