[Pytorch]导数与求导

news2024/11/19 18:40:16

文章目录

  • 导数与求导
    • 一. 标量 向量 矩阵 的导数
    • 二.Pytorch中的反向求导.backward()
    • 三.非标量求导

导数与求导

一. 标量 向量 矩阵 的导数

标量,向量,矩阵间求导后的形状:

y\x标量x(1)向量 x(n,1)矩阵 X(n,k)
标量y(1)(1)(1,n)(k,n)
向量 y(m,1)(m,1)(m,n)(m,k,n)
矩阵Y(m,l)(m,l)(m,l,n)(m,l,k,n)

x 和 w 是向量的情况下: ∂ < x , w > ∂ w = x T x和w是向量的情况下:\frac{∂<\bm x ,\bm w>}{∂\bm w} = \bm x^{T} xw是向量的情况下:w<x,w>=xT
x 是矩阵 w 是向量的情况下: ∂ X w ∂ w = X x是矩阵w是向量的情况下:\frac{∂\bm {X w}}{∂\bm w} = \bm X x是矩阵w是向量的情况下:wXw=X

特殊的, s u m 表示求向量元素和时: 特殊的,sum表示求向量元素和时: 特殊的,sum表示求向量元素和时:

x 是向量的情况下: ∂ x . s u m ∂ x = 1   其中 1 是和 x 同形状的全 1 向量 x是向量的情况下:\frac{∂\bm x.sum}{∂x} = \bm1\space\space其中\bm1是和x同形状的全1向量 x是向量的情况下:xx.sum=1  其中1是和x同形状的全1向量

二.Pytorch中的反向求导.backward()

Pytorch中的反向求导用.backward()方法进行实现

y.backward()
x = torch.arange(4.0)
x.requires_grad_(True)
y = torch.tensor([3.0, 1.0, 2.0, 5.0], requires_grad=True)
z = 2 * torch.dot(x, y)
print(x, '\n', y, '\n', z)
print("反向传播:")
z.backward()
print(f"z对x的偏导数:{x.grad}")
print(f"z对y的偏导数:{y.grad}")
y.grad.zero_()
z = y.sum()
z.backward()
print(f"y.sum对y的导数:{y.grad}")

在这里插入图片描述

三.非标量求导

对于向量求导的情况:
在这里插入图片描述
向量y对于向量x的导数是一个雅各比矩阵,在深度学习中通常得到的是一个方阵

假设X = [x1, x2, x3, x4] ; Y = [y1, y2, y3, y4],其中 y i = x i 2 {y_i}={x_i}^2 yi=xi2,则Y对于X的导数可表达为雅各比行列式:

在这里插入图片描述
然而pytorch中backward()方法的输出需要是一个与原张量同维度的张量,所以当遇到向量求导时,必须在backward中额外传入一个参数gradient,gradient是一个与Y同shape的张量,用于左乘雅各比行列式来获得最终与Y同shape形式的导数:

在这里插入图片描述

除了使用传参形式的backward()方法外,还可以使用.sum()方法:

y.sum().backward() #效果等同于y.backward(torch.ones_like(y)
x = torch.tensor([1, 2, 3, 4], requires_grad=True, dtype=float)
y = torch.tensor([3, 4, 5, 6], requires_grad=True, dtype=float)
z = x * y
z.sum().backward()
print(x.grad)

在这里插入图片描述

关于使用.sum()方法求导的数学解释:
在这里插入图片描述

几种向量求导的代码示例如下:

import torch


# 定义向量x和y,同时运算结果z也是向量
x = torch.tensor([1, 2, 3, 4], requires_grad=True, dtype=float)
y = torch.tensor([3, 4, 5, 6], requires_grad=True, dtype=float)
z = x * y
print('z:', z)

# 1.对向量z进行反向求导,传入参数为和z同shape的ones向量
z.backward(torch.ones_like(z), retain_graph=True)
print(x.grad)

# 2.将参数改为和z同shape的向量[2,3,4,5]后再次反向求导
x.grad.zero_()
z.backward(torch.tensor([2, 3, 4, 5]).reshape(z.shape), retain_graph=True)
print(x.grad)

# 3.使用.sum()函数处理向量求导,效果等同于 1:z.backward(torch.ones_like(z)
x.grad.zero_()
z.sum().backward()
print(x.grad)

运行结果:
在这里插入图片描述

  • 使用.sum方法辅助求导后的结果为[3, 4, 5, 6]等效于给所求雅各比行列式左乘了行向量[1, 1, 1, 1]后结果为:[3, 4, 5, 6]
  • 将backward()方法中的参数改为[2, 3, 4, 5]后,相当于给原雅各比行列式左乘了行向量[2, 3, 4, 5],应该是在原来结果[3, 4, 5, 6]的基础上每行分别乘2,3,4,5,最终结果为[6, 12, 20, 30]
    在这里插入图片描述

参考博文:
https://blog.csdn.net/qq_52209929/article/details/123742145
https://zhuanlan.zhihu.com/p/216372680

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

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

相关文章

Unity Image/GL实现一个框选功能吧

场景准备 准备一张框选背景图 导入到unity之后&#xff0c;修改 Texture Type 为 Sprite&#xff0c;&#xff08;根据图片需要&#xff09;在 Sprite Editor 中 编辑 九宫格格式。图片样式的不一致&#xff0c;设置的九宫格格式也不一致。本例中虚线部分需要等距离平铺&…

Visual C++类的继承及类中成员的访问特性——搞懂public、protected、private

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来说说Visual C中类的继承及类中成员的访问特性&#xff0c;也就是来搞懂public、protected、private这三个东西。 很多人搞不清楚这三个东西&#xff0c;并且很容易弄错&#xff0c;其实不是学习的人的…

vr全景在线虚拟展馆节约企业成本费用

博物馆作为人们了解历史、文化和艺术的重要场所&#xff0c;现在可以通过VR全景技术来进行展览&#xff0c;让参观者身临其境地感受历史文化的魅力。本文将介绍博物馆VR全景的特点、优势&#xff0c;以及如何使用VR全景技术来使得博物馆的展览和教育活动更丰富。 参观者可以对内…

【Linux】权限理解

Linux权限理解 shell外壳运行原理为什么我们不是直接访问操作系统&#xff1f;外壳程序的意义 权限的概念与操作用户的权限如何进行Linux下用户身份的切换? 角色和文件的权限权限是什么&#xff1f;Linux中文件的类型是如何被确定的&#xff1f;权限与角色的关系权限与文件属性…

玩机搞机---修改系统固件不开机 安卓13去除系统app签名验证的几种方法

谷歌在安卓13中对系统应用添加了一层校验验证&#xff0c;你如果修改了系统app.那么原有的签名加载后过不去验证&#xff0c;会导致进不去系统卡第一屏或者进入系统后修改的app错误等等故障。 Android 13增加了新的apk签名校验机制&#xff0c;现在开机中它会对所有系统分区&a…

Hive中怎样创建和查询视图信息?

视图是从数据库的数据表中选取出来的数据组成的逻辑窗口&#xff0c;它是一个虚拟机表。引入视图后&#xff0c;用户可以将注意力集中在关心的数据上&#xff0c;如果数据来源于多个基本表结构&#xff0c;并且搜索条件比较复杂时&#xff0c;需要编写的查询语句就会比较烦琐&a…

hivesql 将数据处理成复杂json

类型一 原数据&#xff1a;bankid是array类型 目标数据&#xff1a; {"bankname": ["SPDB", "WS_HBBANK", "mytest"],"grid": [{"name": "阶段1","values": ["38.0,1.0,1.0"]}…

安全生产月评选活动-优秀的“安全之星”,塑造榜样力量

安全生产月评选活动-优秀的“安全之星”&#xff0c;塑造榜样力量。 推荐功能&#xff1a;投票 企业可以举办安全生产月评选活动&#xff0c;选出优秀的“安全之星”&#xff0c;进行内部评选&#xff0c;塑造榜样力量。 首先&#xff0c;让我们先来了解一下“安全生产月评选活…

MYSQL各种log

本章纲要 1、mysql主从复制是怎么实现的&#xff08;binlog,relaylog&#xff09; 2、事物执行原理是怎么保证ACID的&#xff08;redolog,undolog&#xff09; 一、Mysql是怎么实现主从复制的 数据库主从设计的好处&#xff1a; 1、实现读写分离&#xff0c;方便扩展&#…

MySQL 磁盘爆了,是 optimize table 的锅

2023-06-26 22:17左右&#xff0c;收到某系统的主库磁盘使用率告警。2023-06-26 23:02左右收到该系统的从库磁盘使用率告警。 收到告警后&#xff0c;登录数据库查看各表的磁盘使用。 经分析发现DB存在一个当日的备份表t_eap_sys_navigation_log_bak_20230626 &#xff0c;且在…

4077:出栈序列统计

codeup【递归入门】出栈序列统计_codeup编程_战斗的咸鱼的博客-CSDN博客 #include<iostream> using namespace std; int n,sum,ans; void dfs(int out,int in,int not_in){if(outn){ans;return;}if(in>0) dfs(out1,in-1,not_in);if(not_in>0&&in<n) dfs…

Vue模板编译

文章目录 导文Vue模板编译是什么&#xff1f;模拟编译模板总结 导文 Vue框架使用了模板编译的方式来将Vue模板转换为可执行的JavaScript代码。这个编译过程在运行时由Vue的编译器完成。 在Vue中&#xff0c;模板是以HTML标记的形式编写的&#xff0c;其中可以包含Vue的特殊语法…

【探索 Kubernetes|作业管理篇 系列 14】StatefulSet 存储状态

前言 大家好&#xff0c;我是秋意零。 在上一篇中&#xff0c;我们讲解了 StatefulSet 的拓扑状态&#xff1b;我们发现&#xff0c;它的拓扑状态&#xff0c;就是顺序启动/删除、Pod 名称编号命名、将 Pod 名称设为 Hostname 名称、通过 Service 无头服务的 DNS 记录访问。 …

基于Python的海量豆瓣电影、数据获取、数据预处理、数据分析、可视化、大屏设计项目(含数据库)

目录 项目介绍研究背景国内外研究现状分析研究目的研究意义研究总体设计网络爬虫介绍豆瓣电影数据的采集数据预处理大数据分析及可视化豆瓣影评结构化分析 大屏可视化文本可视化总结每文一语 项目介绍 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博…

虹科DataHub:连接工业自动化的桥梁,引领企业数字化转型

一、前言 随着智能制造、工业互联网等新一代信息技术的不断发展&#xff0c;IT和OT融合已成为未来制造业数字化转型的重要趋势。得益于开放的系统架构和创新的软件应用&#xff0c;OT&#xff08;工业自动化技术&#xff09;和信息技术&#xff08;IT&#xff09;系统之间的数…

在windows系统中映射网络驱动器时,如何通过非455端口远程访问Linux服务器的Samba服务

声明 通常情况下&#xff0c;在windows中通过Linux服务器的Samba服务去映射网络驱动器时候&#xff0c;一般默认就是直接填入内网Linux服务器ip即可&#xff0c;它会默认445端口。若是我的windows并不和Linux服务器在一个网段时&#xff0c;该如何操作呢&#xff1f; 1 用管理…

一键转发微信好友朋友圈,自动跟圈

今天咱来讲一下如何实现一键转发朋友圈&#xff1f; 如何一键跟圈&#xff0c;多个微信快速同步发圈&#xff1f; 01 一键转发 浏览朋友圈&#xff0c;在此页面可以浏览所登录的微信号的好友朋友圈&#xff0c;可以实现快速点赞、评论、一键转发。 单击“转发”即可跳转到发…

D. Optical Experiment

题意&#xff1a; D. 光学实验 时间限制&#xff1a;5秒 内存限制&#xff1a;256兆字节 输入&#xff1a;标准输入 输出&#xff1a;标准输出 Phunsuk Wangdu教授进行了一些关于光线的实验。n条光线的实验装置如下&#xff1a; 有一个长方形盒子&#xff0c;在相对的两面…

windows的环回网卡(loopback adapter) 安装方法

0.说明&#xff1a;windows的环回网卡(loopback adapter)的作用&#xff1a; microsoft loopback adapter就是安装在本机上的一块虚拟网卡&#xff0c;它跟本机上的其它物理网卡、和物理网卡连接的网络是没有关系的&#xff0c;你可以理解成这块网卡上的网线接到了另外一个空白…

葡萄风味有奥秘,农科院用机器学习揭示基因渐渗过程

内容一览&#xff1a;基因渐渗与葡萄的驯化、遗传改良密切相关。先前研究揭示了欧洲栽培葡萄中&#xff0c;野生葡萄基因渐渗的基因组信号&#xff0c;但尚未深入研究这些渐渗事件发生的时间、方式、基因组模式和生物学效应。本文中&#xff0c;中国农业科学院深圳农业基因组研…