4-2 张量的数据运算

news2024/11/20 7:26:47

张量数学运算主要有:标量运算,向量运算,矩阵运算,以及使用非常强大而灵活的爱因斯坦求和函数torch.einsum(重难点)进行任意维的张量运算。此外还会介绍张量运算的广播机制。

一,标量运算 (操作的张量至少是0维)

张量的数学运算符可以分为标量运算符、向量运算符、以及矩阵运算符。
加减乘除乘方,以及三角函数,指数,对数等常见函数,逻辑比较运算符等都是标量运算符。
标量运算符的特点是对张量实施逐元素运算。
有些标量运算符对常用的数学运算符进行了重载。并且支持类似numpy的广播特性。
以下记录一些重难点:

1. torch.max和torch.min

image.png
image.png

2. torch.round floor ceil trunc

image.png

3. torch.fmod remainder

image.png

4. 幅值裁剪 torch.clamp

image.png

二、向量运算

1. cum扫描

torch.cumsum:返回维度dim中输入元素的累计和。例如,如果输入是大小为N的向量,则结果也将是大小为N的带有元素的向量。【运算后维度不变】
这里统一解释以下维度:
如果是一维数据(一维向量):
image.png
一维数据的规模结果就只有一个数,这里算出来就是6,dim=0,指的是列不变,dim=-1也是指的列不变。
如果是二维数据(矩阵):
image.png
dim=0表示按行的方向滑动窗口来累计;dim=1/-1都表示按列的方向来滑动窗口来累计。
可以看到,操作之后规模/形状是不变的。
torch.cumprod:返回维度dim中输入元素的累计乘积。
image.png
torch.cummax、torch.cummin(注意输出有values和indices,若不指定则都输出
image.png

2. torch.sort torch.topk排序

image.png
更改参数:(因为名字就是top k )
image.png
torch.sort 默认是从小到大
image.png

三、矩阵运算(操作的张量至少是二维张量)

矩阵必须是二维的。类似torch.tensor([1,2,3])这样的不是矩阵。
矩阵运算包括:矩阵乘法,矩阵逆,矩阵求迹,矩阵范数,矩阵行列式,矩阵求特征值,矩阵分解等运算。

1. 矩阵乘法

@ 符,等价于torch.matmul(a,b) 或 torch.mm(a,b)
*注意区分 * 和 @ 表示对应元素相乘
image.png
image.png
5x5x6 @ 5x6x4 = 5x5x4(后面两个维度相乘)

2. 矩阵转置

image.png

3. 矩阵求逆

image.png

4. 矩阵求迹

image.png

5. 矩阵求范数

image.png

6. 矩阵行列式

image.png

7. 矩阵求特征值和特征向量

image.png

8. 矩阵QR分解

矩阵QR分解, 将一个方阵分解为一个正交矩阵q和上三角矩阵r
QR分解实际上是对矩阵a实施Schmidt正交化得到q
image.png

9. 矩阵SVD分解

svd分解可以将任意一个矩阵分解为一个正交矩阵u,一个对角阵s和一个正交矩阵v.t()的乘积
svd常用于矩阵压缩和降维
image.png

四、任意张量运算(einsum!!!)

如果问pytorch中最强大的一个数学函数是什么?
我会说是torch.einsum:爱因斯坦求和函数。
它几乎是一个"万能函数":能实现超过一万种功能的函数。
不仅如此,和其它pytorch中的函数一样,torch.einsum是支持求导和反向传播的,并且计算效率非常高。
einsum 提供了一套既简洁又优雅的规则,可实现包括但不限于:内积,外积,矩阵乘法,转置和张量收缩(tensor contraction)等张量操作,熟练掌握 einsum 可以很方便的实现复杂的张量操作,而且不容易出错。
尤其是在一些包括batch维度的高阶张量的相关计算中,若使用普通的矩阵乘法、求和、转置等算子来实现很容易出现维度匹配等问题,若换成einsum则会特别简单。
套用一句深度学习paper标题当中非常时髦的话术,einsum is all you needed 😋!

1. einsum规则原理

image.png
这个函数的规则原理非常简洁,3句话说明白。
1,用元素计算公式来表达张量运算。
2,只出现在元素计算公式箭头左边的指标叫做哑指标。
3,省略元素计算公式中对哑指标的求和符号。
image.png

2. einsum基础范例

einsum这个函数的精髓实际上是第一条:
用元素计算公式来表达张量运算。
而绝大部分张量运算都可以用元素计算公式很方便地来表达,这也是它为什么会那么神通广大。

2.1 张量转置

转置后面两个维度
image.png

2.2 取对角元素

image.png

2.3 求和降维

image.png

2.4 哈达玛积 各元素对应相乘

image.png

2.5 向量内积

image.png
注意 i,i-> 和 i,i->i 不一样!!!
向量内积得到的是一个数
image.png
此处得到的还是与原来一致的大小。

2.6 向量外积

类似笛卡尔积
image.png
就是A中10个元素与B中5个元素相乘(所以enisum写法也是:i,j->ij),比如A的第1个元素与B的每个元素相乘,得到第一行数据,共5个值,最终矩阵是10x5

2.7 矩阵乘法

image.png

2.8 张量缩并

image.png

3. einsum高级范例

3.1 双线性变换

einsum可用于超过两个张量的计算。
例如:双线性变换。这是向量内积的一种扩展,一种常用的注意力机制实现方式)
不考虑batch维度时,双线性变换的公式如下:
image.png
image.png
考虑batch维度时,无法用矩阵乘法表示,可以用元素计算公式表达如下:
image.png
image.png

3.2 scaled-dot-product注意力机制

我们也可以用einsum来实现更常见的scaled-dot-product 形式的 Attention.
不考虑batch维度时,scaled-dot-product形式的Attention用矩阵乘法公式表示如下:
image.png
image.png
考虑batch维度时,无法用矩阵乘法表示,可以用元素计算公式表达如下:
image.png
image.png

3.3 性能测试

image.png

五、广播机制

Pytorch的广播规则和numpy是一样的:
1、如果张量的维度不同,将维度较小的张量进行扩展,直到两个张量的维度都一样。
image.png
等价于:
image.png
image.png
2、如果两个张量在某个维度上的长度是相同的,或者其中一个张量在该维度上的长度为1,那么我们就说这两个张量在该维度上是相容的。
3、如果两个张量在所有维度上都是相容的,它们就能使用广播。
4、广播之后,每个维度的长度将取两个张量在该维度长度的较大值。
5、在任何一个维度上,如果一个张量的长度为1,另一个张量长度大于1,那么在该维度上,就好像是对第一个张量进行了复制。
torch.broadcast_tensors可以将多个张量根据广播规则转换成相同的维度。
维度扩展允许的操作有两种: 1,增加一个维度 2,对长度为1的维度进行复制扩展

参考:https://github.com/lyhue1991/eat_pytorch_in_20_days

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

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

相关文章

Vue3高频面试题+八股文

Vue3.0中的Composition Api 开始之前 Compos:1 tion API可以说是ue3的最大特点,那么为什么要推出Compos1t1on Api,解决了什么问趣? 通常使用Vue2开发的项目,普遍会存在以下问题: 代码的可读性随着组件变大而变差每一种代码复用的…

【JavaScript内置对象】Date对象,从零开始

【JavaScript内置对象】Date对象,从零开始 时间的表示方式 时间表示的基本概念 最初,人们是通过观察太阳的位置来决定时间的,但是这种方式有一个最大的弊端就是不同区域位置大家使用的时间是不一致的。 相互之间没有办法通过一个统一的时间…

15W SIP木质网络音箱

SV-7041VP15W SIP木质网络音箱 一、描述 SV-7041VP是深圳锐科达电子有限公司的一款壁挂式SIP网络有源音箱,具有10/100M以太网接口,可将网络音源通过自带的功放和喇叭输出播放,可达到功率15W。同时它可以外接一个15W的无源副音箱&#xff0c…

LeetCode每日一题:1222. 可以攻击国王的皇后(2023.9.14 C++)

目录 1222. 可以攻击国王的皇后 题目描述: 实现代码与解析: 模拟 原理思路: 1222. 可以攻击国王的皇后 题目描述: 在一个 8x8 的棋盘上,放置着若干「黑皇后」和一个「白国王」。 给定一个由整数坐标组成的数组 …

Flutter与Native通信原理剖析与实践

通信原理 我们分几种场景来介绍Flutter和Native之间的通信。 Native发送数据给FlutterFlutter发送数据给NativeFlutter发送数据给Native,然后Native回传数据给Flutter Flutter与Native通信机制 在讲解Flutter与Native之间是如何传递数据之前,我们先了…

k8s集群中部署项目之流水线

微服务项目部署之流水线编写 一、部署微服务项目环境说明 1.1 代码托管到gitee 1.2 镜像托管到dockerhub 用户名:nextgomsb 密码:abc***.com1.3 流水线工具 KubeSphere 二、通过KubeSphere部署之拉取代码流水线编写 2.1 准备凭证 2.2 编辑流水线 pipe…

MySQL学习6:索引

来源 教学视频来源:黑马程序员 MySQL数据库入门到精通,从mysql安装到mysql高级、mysql优化全囊括 简介 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着…

vue事件处理表单输入绑定

1.监听事件 我们可以使用 v-on 指令 (简写为 ) 来监听 DOM 事件,并在事件触发时执行对应的 JavaScript。用法:v-on:click"handler" 或 click"handler"。 事件处理器 (handler) 的值可以是: 内联事件处理器:事…

使用Git把项目上传到Gitee的详细步骤

1.到Git官网下载并安装 2.到Gitee官网进行注册,然后在Gitee中新建一个远程仓库 3.设置远程仓库的参数 4.返回Gitee查看仓库是否生成成功 5.新建一个文件夹作为你的本地仓库 6.将新建好的文件夹初始化成本地仓库 第一步:右键点击刚创建的本地仓库&#…

2003-2018年各省能源结构(煤炭占比)(含原始数据和计算过程)

2003-2018年各省能源结构(煤炭占比)(含原始数据和计算过程) 1、时间:2003-2018年 2、指标:原煤、洗精煤、其他洗煤、型煤、焦炭、焦炉煤气、其他煤气、其他焦化产品、原油、汽油、煤油、柴油、燃料油、液…

基于python解决鸡兔同笼问题

一、什么是鸡兔同笼问题? 鸡兔同笼问题是一个经典的数学问题。问题描述:鸡和兔子共有头数a和脚数b,求鸡和兔子的数量。 解析:设鸡的数量为x,兔子的数量为y,那么可以得到以下两个方程: 1. x y…

C++ PrimerPlus 复习 第二章 进入c++

第一章 命令编译链接文件 make文件 文章目录 创建C程序;C程序的一般格式;main()函数;使用cout对象进行输出,使用cin对象进行输入;coutcin #include编译指令;名称空间定义和使用简单函数。在C程序中加入注释&#xff1…

Nginx配置指南:如何定位、解读与优化Linux上的Nginx设置

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

Harmony系统更改手机IP

在当今的互联网环境中,我们经常需要更改手机的IP地址来绕过限制或保护我们的隐私。虽然在一些操作系统上更改IP地址相对较容易,但在Harmony系统上,这可能会有些困难。因此,本文将分享一种在Harmony系统上免费更改手机IP地址的方法…

linux 下实现一个进度条

倒计时 理解 printf 打印的内容是被放在输出缓冲区的 fflush(stdout) 刷新 输出缓冲区;\n 也是一种刷新的策略我们称之为行刷新 理解一下回车换行 首先:回车是回车 换行是换行 回车是回到这一行的开头 换行是换到下一行 所以我们平时使用的 Enter 键 …

一线大厂Redis高并发缓存架构实战与性能优化

多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据, 缓存层和存储层都不会命中, 通常出于容错的考虑, 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询, 失…

二叉树的概念及存储结构

目录 1.树的概念 1.1树的相关概念 1.2树的表示与应用 2.二叉树的概念及结构 2.1二叉树的概念 2.1.1特殊的二叉树 2.2.2二叉树的性质 2.2二叉树的结构 2.2.1顺序存储 2.2.2链式存储 这是一篇纯理论的博客,会对数据结构中的二叉树进行详细的讲解,让你对树的能有个清晰的…

智能语音机器人竞品调研

一、腾讯云-智能客服机器人 链接地址:智能客服机器人_在线智能客服_智能客服解决方案 - 腾讯云 二、阿里云-智能语音机器人 链接地址:智能对话机器人-阿里云帮助中心 链接地址:智能外呼机器人的业务架构_智能外呼机器人-阿里云帮助中心 三、火…

word文档怎么转换成pdf?几个实用文档转换方法

word文档怎么转换成pdf?PDF文档可以保护文档的格式和布局。如果你将Word文档发送给他人,他人可能会使用不同版本的Word软件打开文档,导致格式和布局发生变化。但是,如果你将Word文档转换为PDF文档,无论对方使用什么软件…

Android Studio的笔记--Android API的方法和位置

Android API 官网API中文API源码位置 官网API Package Index 可以修改查看对应的API等级的方法 中文API Android 包索引 源码位置 在工程的位置如下 \frameworks\base\core\java\android\ 与君共勉!