关于pytorch中部分矩阵乘法的总结(torch.mm,torch.mul,torch.matmul)

【Pytorch学习】torch.mm()&torch.matmul()和torch.mul()以及torch.spmm() 做深度学习过程中免不了使用pytorch,刚上手可能觉得pytorch是一门新语言。过一段时间之后发现其用法跟python极其相似,python的很多函数名都可以用到torch中。当然也有一些不同,毕竟张量的计算可以用GPU啊。是矩阵a和b矩阵相乘,比如a的维度是(1, 2),b的维度是(2, 3),返回的就是(1, 3)的矩阵。当然,对于二维的效果等同于torch.mm()。关于torch.matmul的详细介绍可以看。torch.matmul()的用法比torch.mm更高级,的维度必须相等,比如。 阅读详情

一、torch.mul

该乘法可简单理解为矩阵各位相乘,一个常见的例子为向量点乘,源码定义为torch.mul(input,other,out=None)。其中other可以为一个数也可以为一个张量,other为数即张量的数乘。
该函数可触发广播机制(broadcast)。

tensor1 = 2*torch.ones(1,4)
tensor2 = 3*torch.ones(4,1)
print(torch.mul(tensor1, tensor2))
#输出结果为:
tensor([[6., 6., 6., 6.],
        [6., 6., 6., 6.],
        [6., 6., 6., 6.],
        [6., 6., 6., 6.]])

二、torch.mm

这是我们在线性代数课程中学习的矩阵乘法。该函数源码定义为torch.mm(input,mat2,out=None) ,参数与返回值均为tensor形式。

a=torch.ones(4,3)  
b=2*torch.ones(3,2)  
c=torch.empty(4,2)  
torch.mm(a,b,out=c)  
print(torch.mm(a,b))  
print( c )

#输出结果为
tensor([[6., 6.],
        [6., 6.],
        [6., 6.],
        [6., 6.]])
tensor([[6., 6.],
        [6., 6.],
        [6., 6.],
        [6., 6.]])

三、torch.matmul

这个矩阵乘法是在torch.mm的基础上增加了广播机制,源码定义为torch.matmul(input,other,out=None)。
其基本运算规则如下:

  • 如果两个参数都为一维,则等价于torch.mul,需要注意的是:此时的out不接受任何参数
  • 如果两个张量都为二维且符合矩阵相乘规则,或第一个参数为一维(长度为m,这里等价为大小为1* m),第二个参数为二维(大小为m* n)则运算等价于torch.mm
  • 如果第一个参数为二维(大小m* n),第二个参数为一维(长度为n),这里第二个参数会进行转置成为n* 1的列向量,随后进行矩阵相乘,将得到的结果再进行转置,最终返回一个大小为1* m的向量
tensor1 = torch.tensor([[1,1,1,1],[2,2,2,2],[3,3,3,3]],dtype=torch.float32)
tensor2 = torch.ones(4)
print(tensor1.size())
print(tensor2.size())
print(torch.matmul(tensor1, tensor2))
#输出结果为:
torch.Size([3, 4])
torch.Size([4])
tensor([ 4.,  8., 12.])
  • 最后的情况就是任意一个参数至少为3维, 当前面的维度相同且最后两个维度符合二维矩阵运算规则可进行计算,例如第一参数的大小为a* b * c * m,第二个参数的大小为a* b* m* d,则返回一个大小为a* b* c * d的张量,可触发广播机制。
tensor1 = torch.ones(1,4,3,2)
tensor2 = torch.ones(2,6)
print(torch.matmul(tensor1, tensor2).size())
#输出结果为:
torch.Size([1, 4, 3, 6])

参考文献:https://pytorch.org/docs/stable/torch.html?highlight=matmul#torch.matmul

pytorch函数mm() mul() matmul()区别 1、函数 1.1 作用 torch.matmul是tensor的乘法,输入可以是高维的。 2 、举例 当输入都是二维时,就是普通的矩阵乘法,和tensor.mm函数用法相同。 当输入有多维时,把多出的一维作为batch提出来,其他部分做矩阵乘法。 下面看一个两个都是3维的例子: 将b的第0维1broadcast成2提出来,后两维做矩阵乘法即可。 再看一个复杂一点的,是官网的例子: 首先把a的第0维2作为batch提出来,则a和b都可看作三维。再把a的1broadcat成5,提取公因式5。(这样 阅读详情

相关推荐

torch中的矩阵乘法与广播机制

几乎可用于计算所有矩阵/向量相乘的情况,支持broadcast操作,可以理解为torch.mm的broadcast版本,其乘法规则视参与乘法的两个张量的维度而定。特别的,针对多维数据 matmul()乘法,可以认为该 matmul()乘法使用两个参数的后两个维度来计算,其他的维度都可以认为是batch维度。用于计算矩阵和向量之间的乘法(矩阵在前,向量在后),不支持broadcast操作,要求矩阵与向量满足矩阵乘法的要求。用来计算两个向量的点积,不支持broadcast操作,要求两个一维张量的元素个数相同。

panghuzhenbang的博客 5394

pytorch笔记:pytorch的乘法

1 点乘 tensor与标量点乘的结果是每个元素乘以这个标量的值

qq_40206371的博客 3031

基于YOLOv8和PaddlepaddleOCR的微信截图聊天记录提取

本文提出了一种基于YOLOv8和PaddleOCR的微信聊天记录提取方法。首先使用YOLOv8n模型分割出聊天气泡(针对深浅色模式分别训练),通过合成数据集增强模型鲁棒性,召回率达0.995。随后采用PP-OCRv5进行文本识别,利用坐标匹配将气泡内文本送入识别队列,短长文本平均置信度分别>0.98和>0.95。文中特别强调了PaddleOCR不同版本的输出格式差异及适配方案,建议使用3.0+版本。该方法有效解决了直接OCR识别易受干扰的问题,通过气泡分割+文本定位的两阶段策略显著提升了识别准确

2401_87383958的博客 2358

pytorch中的矩阵乘法操作:torch.mm(), torch.bmm(), torch.mul()和*, torch.dot(), torch.mv(), @, torch.matmul()

pytorch中的矩阵乘法操作:torch.mm(), torch.bmm(), torch.mul()和*, torch.dot(), torch.mv(), @, torch.matmul()

weixin_43646592的博客 4210

局域网ip冲突检测工具_python 小工具实现 windows笔记本与 ipad数据互传

宅在家没事的时候就开始琢磨ipad的进阶使用,由于没有mac无法隔空投送,ipad与windows的数据交互表现极差,所以设计了这个ftp小工具。当然,这个工具不仅仅能用于windows与ipad,还可以用于局域网任意两台设备之间程序源码与下载见文章末尾使用说明windows端:biubiubiu.exeipad端: appsotre下载 FE文件管理器windows端操作在c盘下创建ftp目录...

weixin_39866265的博客 4436

鸿蒙子系统解读-分布式软总线子系统初步研究(下)

鸿蒙子系统解读-分布式软总线子系统初步研究(下) 本文作者:江苏润和软件股份有限公司 郎建中 3.2. 数据传输 上一节我们看了PublishService()函数的代码实现过程。被发现端发布服务后,软总线回调发布成功的函数中,被发现端需要使用CreateSessionServer()来创建会话的服务器等待发现端的连接创建会话。下面我们就来分析CreateSessionServer()函数的实现过程。 数据传输部分的代码位于foundation/communication/services/softbus

weixin_47070198的博客 3091

Pytorch广播机制与matmul函数

1.pytorch的广播机制与numpy类似,当两个tensor逐元素相乘时(两个tensor的size必须相同),会遇到前后tensor的size不同,此时便需要广播机制了。 广播机制条件:其中任意一个tensor必须至少有一个维度要么相等,从两个tensor的size末尾开始比较,要么其中一个为1,要么其中一个不存在,满足其一即可。 如: 在pytorch中,*表示逐元素相乘,而@是矩阵乘积,但是对于高维tensor,@不再适用,尤其是对于size大小还不同的两个张量,pytorch还有一个函数:mu

weixin_44871977的博客 2566

ATS Request中的PASID的作用是什么

摘要: PASID(进程地址空间标识符)是PCIe ATS(地址转换服务)中的关键组件,用于标识不同进程或虚拟机的地址空间。其主要作用包括:1)支持多进程共享设备时隔离地址空间;2)实现共享虚拟地址(SVA),允许用户态程序直接访问设备;3)提升虚拟化性能(如SIOV),通过PASID区分虚拟机请求;4)增强安全性,基于PASID限制设备内存访问权限。PASID通过20位标识符在TLP前缀中传递,与IOMMU协作完成地址转换与缓存,适用于高性能计算、AI及虚拟化场景,但依赖硬件支持和软件适配。

元直的博客 1562

Pytorch矩阵乘法总结

pytorch一共有5种乘法 *乘,element-wise乘法,支持broadcast操作 torch.mul(),和*乘完全一样 torch.mm(),矩阵叉乘,即对应元素相乘相加,不支持broadcast操作 torch.bmm(),三维矩阵乘法,一般用于mini-batch训练中 torch.matmul(),叉乘,支持broadcast操作 先定义下面的tensor(本文不展示print结果): import torch tensorA_2x3 = torch.tensor( [[1

weixin_42065178的博客 1万+

ISOLAR Autosar BSW 配置 之 Com

Autosar ISOLAR Bsw Configuration 之 Com

qq_42262743的博客 453

基于YOLO系列的安全帽检测系统:从理论到实现的完整指南

安全帽检测作为计算机视觉在工业安全领域的重要应用,近年来得到了广泛关注。本文详细介绍了基于YOLOv5、YOLOv6、YOLOv7和YOLOv8的安全帽检测系统的完整实现方案,包括算法原理、数据集构建、模型训练、性能优化以及完整的UI界面设计。通过对比分析不同YOLO版本的性能差异,本文为工业安全检测系统的开发提供了全面的技术参考和实践指导。

YOLO 364

pytorch----矩阵乘法

torch中的矩阵乘法: 一.矩阵乘 二.矩阵乘 三.对应元素相乘 torch.mul: 和普通标量也是对应元素相乘: #输入张量和标量相乘 torch.mul(input, value, out=None) 例: >>> a = torch.randn(3) >>> a -0.9374 -0.5254 -0.6069 [torch.FloatTensor of size 3] >>> tor...

weiwei935707936的博客 8429

万字详解 PostgreSQL 的详细安装方式(Linux、Windows、macOS、Docker 全平台覆盖)

本文详细介绍了PostgreSQL在四大主流环境下的安装方法: Linux系统:针对Ubuntu/Debian和CentOS/RHEL系,分别提供APT/YUM仓库安装步骤,包括初始化配置和服务管理 Windows系统:通过图形化安装程序指导完成安装,包含组件选择、密码设置和pgAdmin配置 macOS系统:推荐使用Homebrew一键安装,支持Apple Silicon和Intel芯片 Docker容器:提供容器化部署方案(文中未展开) 文章强调安装前的版本选择、权限管理和存储规划,并针对各平台给出验证

数据知道的博客 4506

Pytorch矩阵乘法之torch.mul() 、 torch.mm() 及torch.matmul()的区别

torch.mul() 、 torch.mm() 及torch.matmul()的区别 一、简介 torch.mul(a, b) 是矩阵a和b对应位相乘,a和b的维度必须相等,比如a的维度是(1, 2),b的维度是(1, 2),返回的仍是(1, 2)的矩阵; torch.mm(a, b) 是矩阵a和b矩阵相乘,比如a的维度是(1, 2),b的维度是(2, 3),返回的就是(1, 3)的矩阵。 torch.bmm() 强制规定维度和大小相同 torch.matmul() 没有强制规定维度和大小,可以用利用广

irober的博客 3万+

【Arduino+ESP32专题】CP2102串口自动下载电路

CP2102串口自动下载电路原理是什么?

一点硬件 2958

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

pytorch之torch中的几种乘法 #点乘torch.mm() #矩阵乘torch.mul(),torch.matmul() #高维Tensor相乘维度要求

文章目录1. 点乘——`torch.mul(a, b)`2. 矩阵乘2.1. 二维矩阵乘——`torch.mm(a, b)`2.2. 高维矩阵乘——`torch.matmul(a, b)`3. 高维的Tensor相乘维度要求3.1. 对于维数相同的张量3.2. 对于维数不一样的张量 1. 点乘——torch.mul(a, b) 点乘都是broadcast的,可以用torch.mul(a, b)实现,也可以直接用*实现。 当a, b维度不一致时,会自动填充到相同维度相点乘。 import torch a =

夏普通 4万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

torch.Tensor的4种乘法

torch.Tensor的4种乘法 torch.Tensor有4种常见的乘法:*, torch.mul, torch.mm, torch.matmul. 本文抛砖引玉,简单叙述一下这3种乘法的区别,具体使用还是要参照官方文档。 * a与b做*乘法,原则是如果a与b的size不同,则以某种方式将a或b进行复制,使得复制后的a和b的size相同,然后再将a和b做element-wise的乘法。 下面以...

da_kao_la的博客 16万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【Pytorch】进阶学习:实现矩阵乘法---torch.mul() 、 torch.mm() 和torch.matmul()的区别

总结一下,torch.mm()和这三个函数的主要区别在于它们处理张量的方式和维度要求不同。执行的是元素级别的乘法,要求输入张量形状相同;torch.mm()执行的是标准的矩阵乘法,只适用于二维张量;而则提供了更广义的矩阵乘法,可以处理任意维度的张量,包括批量矩阵乘法。确保输入张量的形状符合函数的要求,否则可能会引发错误。对于矩阵乘法,需要注意矩阵的维度匹配问题,即第一个矩阵的列数必须等于第二个矩阵的行数。在进行批量矩阵乘法时,使用可以方便地处理多个矩阵的乘法运算。

m0_58477260的博客 3574

torch中的几种乘法。torch.mm, torch.mul, torch.matmul

一、点乘 点乘都是broadcast的,可以用torch.mul(a, b)实现,也可以直接用*实现。 >>> a = torch.ones(3,4) >>> a tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]) >>> b = torc...

weixin_42105432的博客 2万+

torch.mul、torch.mm、torch.bmm、torch.matmul的区别

torch.mul、torch.mm、torch.bmm、torch.matmul的区别

给时光以生命 1万+

Pytorch基础:张量相关的乘法(torch.mul、torch.mv、torch.matmul、torch.mm、torch.bmm、torch.dot、torch.tensordot、*、@)

本文详细介绍了PyTorch中常见的张量乘法运算,包括torch.mul(逐元素乘法)、torch.matmul(矩阵乘法)、torch.mm(矩阵乘法)、torch.bmm(批量矩阵乘法)、torch.dot(向量点积)、torch.tensordot(张量点积)以及运算符*和@的用法。通过具体示例说明了各种乘法操作的特点,特别是广播机制在不同运算中的应用场景。文章还强调了不同运算对输入张量形状的要求差异,帮助读者理解PyTorch中张量乘法的多样性和适用场景。

保持终身学习的能力,温故而知新 2991

torch.mm() torch.sparse.mm() torch.bmm() torch.mul() torch.matmul()的区别

目录torch.mm()torch.sparse.mm()torch.bmm()torch.mul()torch.matmul()总结 torch.mm() 二维矩阵的乘法,假设输入矩阵mat1维度是(m×n)(m×n)(m×n)​​​,矩阵mat2维度是(n×p)(n×p)(n×p)​​​​,则输出维度为(m×p)(m×p)(m×p)​,只能是二维的​​ mat1 = torch.randn(2, 3) mat2 = torch.randn(3, 3) out = torch.mm(mat1, mat2)

十二月未央未眠 7594

Pytorch常用乘法函数总结:torch.mul()、*、torch.mm()、torch.bmm()、torch.mv()、torch.dot()、@、torch.matmul()

torch.mul() 和 * 等价,为element-wise乘,可广播;torch.mm() 二维矩阵乘法,torch.bmm() 三维批量矩阵乘法,均不可广播;torch.mv(mat, vec) 为矩阵向量乘法,不可广播;torch.dot() 仅支持两个一维向量点积,返回一个标量数字;@ 矩阵乘法,等价于 torch.dot() + torch.mv() + torch.mm();torch.matmul() 矩阵乘法,与 @ 类似,但它不止一维二维,可扩高维,可广播

qq_43629945的博客 3000

Pytorch基础:Torch.mul、Torch.mm与Torch.matmul的异同

Pytorch基础:Torch.mul、Torch.mm与Torch.matmul的异同 Torch.mul torch.mul(input, other, ***, out=None) → Tensor 将输入的每个元素与另一个标量相乘,返回一个新的张量。 outi=other×inputi out_i = other \times input_i outi​=other×inputi​ input是张量, other将会乘每个张量元素。输出是张量。 如果输入是FloatTensor或DoubleTens

qq_42388742的博客 3567

【张量乘法】pytorch中的mul、dot、mm、matmul

张量的乘法是pytorch等神经网络开发框架中最常见、最基本的操作之一。

木盏 1312
上一篇: 【数据结构】 实验报告07 线性表的合并
下一篇: pytorch中torch.cat(),torch.chunk(),torch.split()函数的使用方法
RealWeakCoder
博客等级 码龄7年 236粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值