【python】自动微分的一个例子

一、例子

import torchx = torch.arange(4.0)
x.requires_grad_(True)
y = 2 * torch.dot(x, x)
print(y)
y.backward()
x.grad == 4 * x
print(x.grad)

二、解读

1. import torch

这一行导入了PyTorch库。PyTorch是一个开源的机器学习库,广泛用于计算机视觉和自然语言处理等领域。

2. x = torch.arange(4.0)

这一行创建了一个一维张量 x,它包含了4个元素:[0., 1., 2., 3.]。张量是一个类似于数组的数据结构,可以在GPU上进行高效的数学操作。

3. x.requires_grad_(True)

这一行的作用是设置 x 张量的 requires_grad 标志为 True。这意味着PyTorch将会跟踪在 x 上执行的所有操作以便于后续进行自动求导(计算梯度)。`_ 在方法名后表明该操作是就地(in-place)进行,即会改变 x` 而不是创建一个新的副本。

4. y = 2 * torch.dot(x, x)

这一行定义了一个标量(单个数值) y。通过计算 x 与其自身的点积(`torch.dot(x, x)` 得到 x 中所有元素的平方和),再乘以 2,即 y = 2*(x[0]^2 + x[1]^2 + x[2]^2 + x[3]^2)。

5. y.backward()

这一行执行反向传播,自动计算 y 关于 x 的梯度,并将计算结果存储在 x.grad 属性中。因为 y 是关于 x 的一个标量函数,所以 x.grad 的形状将与 x 相同。
在反向传播过程中,当计算一个标量(即单个数值)函数关于一个向量的梯度时,得到的梯度(或称导数)将是一个与原向量形状相同的向量。这是因为梯度是对向量中每个独立变量的偏导数的集合。
让我们来回顾一下基本的微积分定义:
- 对于一个标量函数 f(x) 相对于一个单变量 x 的导数,表示的是 f 在 x 点的斜率,或者说是在 x 点处 f 随 x 的变化率。这里的导数是个单一的数值。
- 对于一个标量函数 f(x, y, z, ...) 相对于多变量(x, y, z, ...)的梯度,表示的是 f 在每个方向上的偏导数组成的向量。在这种情况下,梯度是一个向量,每个分量对应于函数对某个单一变量的偏导数。
在例子中,y 是关于向量 x 的一个标量函数。函数 y = 2 * torch.dot(x, x) 可看作是 y = 2 * (x[0]^2 + x[1]^2 + x[2]^2 + x[3]^2)。当对 y 进行反向传播时,PyTorch 会对向量 x 中的每个分量计算偏导数,并把这些偏导数放在一个新的向量中。这个新向量,也就是梯度,会与原向量 x 有着相同的形状和大小。
这就是为什么 x.grad 的形状将与 x 相同的原因。在这个例子中, x 是一个有4个元素的向量(一维张量),因此它的梯度 x.grad 也会是一个包含4个偏导数值的向量(一维张量),即每个元素对应输入向量 x 的每个分量的梯度。

6. x.grad == 4 * x

这是一个比较操作,判断 x.grad(`x` 的梯度)是否等同于 4 乘以 x。由于对 y = 2*(x[0]^2 + x[1]^2 + x[2]^2 + x[3]^2) 求导可得梯度 dy/dx = 4*x,这个比较应该是 True。

7. print(x.grad)

这一行打印出 x 的梯度。如果之前的比较 x.grad == 4 * x 为真,打印的结果应该是 [0., 4., 8., 12.]。


这段代码演示了利用PyTorch计算梯度的一个简单例子。通过设置 requires_grad 来跟踪运算,然后通过 backward() 方法来自动计算导数。

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

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

相关文章

DAY10_SpringBoot—SpringMVC重定向和转发RestFul风格JSON格式SSM框架整合

目录 1 SpringMVC1.1 重定向和转发1.1.1 转发1.1.2 重定向1.1.3 转发练习1.1.4 重定向练习1.1.5 重定向/转发特点1.1.6 重定向/转发意义 1.2 RestFul风格1.2.1 RestFul入门案例1.2.2 简化业务调用 1.3 JSON1.3.1 JSON介绍1.3.2 JSON格式1.3.2.1 Object格式1.3.2.2 Array格式1.3…

一站式VR全景婚礼的优势表现在哪里?

你是否想过,婚礼也可以用一种全新的方式呈现,VR全景婚礼让每位用户沉浸式体验婚礼现场感。现在很多年轻人,都想让自己的婚礼与众不同,而VR全景婚礼也是未来发展的方向之一。 很多婚庆公司开通了VR婚礼这一服务,就是通过…

YOLOv5改进系列(28)——添加DSConv注意力卷积(ICCV 2023|用于管状结构分割的动态蛇形卷积)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

mysql生成最近24小时整点最近30天最近12个月时间临时表

文章目录 生成最近24小时整点生成最近30天生成最近12个月 在统计的时候需要按时间来展示,但是数据的时间不一定是连续的,那就需要在代码里面生成连续的时间,然后按时间匹配到对应的数据,这样比较麻烦,可以在sql中使用连…

统计学-R语言-6.3

文章目录 前言总体方差的区间估计总体方差的区间估计(一个总体方差的估计)总体方差的区间估计(两个总体方差比的估计) 总结 前言 本篇文章是最后一个介绍参数估计的章节。 总体方差的区间估计 研究一个总体时,推断总体方差 使用的统计量为样本方差 。研究两个总体…

antdesignvue中使用VNode写法

1、使用场景 如图:消息提示框中,将数据中的数据单独一行显示 2、代码 let errorList res.result; //后端返回的数据例: ["1. 数据格式不正确","2. 数据已存在"]if(errorList&&errorList.length!0){this.$notif…

SpringCloud Bus动态刷新全局广播

文章目录 代码地址配置项目配置修改测试 SpringCloud Bus动态刷新定点通知 代码地址 地址:https://github.com/13thm/study_springcloud/tree/main/days11_%20Bus 配置项目 必须先具备良好的RabbitMQ环境先 演示广播效果,增加复杂度,再以3355为模板再…

node多版本管理工具nvm安装

开发前端项目,有时候新老项目交替,不同项目需要不同的node.js,本机电脑需要安装多个版本的nodejs,手动切换十分麻烦,有了nvm就可以轻松解决这个问题,nvm全名node.js version management 它是一个nodejs的版…

软考复习之UML设计篇

UML统一建模语言 构件图:描述系统的物理结构,它可以用来显示程序代码如何分解成模块 部署图:描述系统中硬件和软件的物理结构,它描述构成系统架构的软件构件,处理器和设备 用例图:描述系统与外部系统及用…

python使用回溯算法解决括号组合问题

对于给定k为括号的总对数,需要将能够组合的所有有效括号组合方式求出的问题。 对于回溯算法是将解空间看做一定的结构,通常是作为树形结构或者图形结构,回溯算法实际上是一种类似枚举的探索尝试过程,主要是在探索尝试过程中寻找解…

c++:类和对象(5),运算符重载

目录 运算符重载概念&#xff1a; 运算符重载 1.成员函数重载号 2.全局函数重载号 打印结果&#xff1a; <<运算符重载 递增运算符重载 简单例子 输出结果为&#xff1a; 赋值运算符重载 如何重载 输出结果为&#xff1a; 什么时候重载 关系运算符重载 简单例…

springboot121编程训练系统设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的编程训练系统设计与实现 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四…

一文深度解读多模态大模型视频检索技术的实现与使用

当视频检索叠上大模型Buff。 万乐乐&#xff5c;技术作者 视频检索&#xff0c;俗称“找片儿”&#xff0c;即通过输入一段文本&#xff0c;找出最符合该文本描述的视频。 随着视频社会化趋势以及各类视频平台的快速兴起与发展&#xff0c;「视频检索」越来越成为用户和视频平…

SpringBoot 自定义Filter 提前返回 CORS 错误 处理前后端分离跨域配置无效问题解析

前言 浏览器有跨域限制&#xff0c;非同源策略 (协议、主机名或端口不同) 被视为跨域请求&#xff0c;解决跨域有跨域资源共享(CORS)、反向代理和 JSONP的方式。本篇通过 SpringBoot 的资源共享配置 (CORS) 来解决前后端分离项目的跨域&#xff0c;以及从原理上去解决跨域配置…

负载均衡流程

1、负载均衡流程图 2、触发负载均衡函数trigger_load_balance void trigger_load_balance(struct rq *rq) { /* Dont need to rebalance while attached to NULL domain */ if (unlikely(on_null_domain(rq)))//当前调度队列中的调度域是空的则返回 return; i…

【嵌入式学习】C++QT-Day1-C++基础

思维导图&&笔记 见我的博客&#xff1a;https://lingjun.life/wiki/EmbeddedNote/19Cpp 作业&#xff1a; 提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数 要求使用C风格字符串完成 #include <iostream&…

[MRCTF2020]Ez_bypass1

代码审计&#xff0c;要求gg和id的MD5值相等而gg和id的值不等或类型不等 相同MD5值的不同字符串_md5相同的不同字符串-CSDN博客 不过这道题好像只能用数组 下一步是passwd不能是纯数字&#xff0c;但是下一个判断又要passwd等于1234567 这里通过passwd1234567a实现绕过 原…

3D点云数据的标定,从搭建环境到点云标定方法及过程,只要有一台Windows笔记本,让你学会点云标定

ptscloudpre: 点云标定准备&#xff1a; 说明&#xff1a; 如下介绍适用windows系统的电脑。apple笔记本同理&#xff0c;但是需要安装MAC版本的anaconda。网址&#xff1a;Free Download | Anaconda可下载对应MAC版本的Anaconda的安装包建议下载2022年或2021年的安装包安装。…

qml中访问控件内部的子项

如何访问Repeater类型内部的子项、Row等布局类型内部的子项以及ListView内部的子项等。。。 1、测试代码 import QtQuick 2.0 import QtQuick.Controls 2.12 import QtQuick.Window 2.12 import QtQuick.Layouts 1.3 import QtQml 2.12Window {id: windowobjectName: "m…

基于Python Django的大数据招聘数据分析系统,包括数据大屏和后台管理

基于Python Django的大数据招聘数据分析系统是一个综合利用大数据技术和数据可视化技术的招聘行业解决方案。该系统旨在帮助企业和招聘机构更好地理解和分析招聘市场的趋势和变化&#xff0c;从而提高招聘效率和质量。 首先&#xff0c;该系统提供了一个强大的后台管理功能&am…