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

PyTorch乘法全解析

在PyTorch里做乘法,可不是随便选个符号就行——不同的乘法对应着完全不同的运算逻辑,用错了轻则结果不对,重则直接报错。今天就把PyTorch里常用的几种乘法掰开揉碎了讲,从原理到代码例子,保证你看完能分清什么时候该用哪种。

一、逐元素乘法:* 运算符与torch.mul()

原理

这种乘法最直观,就是两个张量对应位置的元素相乘,要求两个张量的形状要么完全相同,要么满足广播机制(Broadcast)——简单说就是形状可以通过自动扩展维度来匹配,比如一个(3,)的向量和一个(1,3)的矩阵,会自动把向量扩展成(1,3)再逐元素相乘。

代码例子

importtorch# 形状完全相同的情况a=torch.tensor([[1,2],[3,4]])b=torch.tensor([[5,6],[7,8]])result1=a*b result2=torch.mul(a,b)print("逐元素乘法结果(*):\n",result1)print("逐元素乘法结果(torch.mul):\n",result2)# 广播机制的情况c=torch.tensor([10,20])# 形状(2,)d=torch.tensor([[1],[2]])# 形状(2,1)result3=c*dprint("广播逐元素乘法结果:\n",result3)

输出结果

逐元素乘法结果(*): tensor([[ 5, 12], [21, 32]]) 逐元素乘法结果(torch.mul): tensor([[ 5, 12], [21, 32]]) 广播逐元素乘法结果: tensor([[10, 20], [20, 40]])

可以看到*torch.mul()的效果完全一致,前者是后者的语法糖,日常写代码用*更简洁。

二、矩阵乘法:@ 运算符与torch.matmul()

原理

这就是线性代数里标准的矩阵乘法,要求第一个张量的最后一个维度大小等于第二个张量的倒数第二个维度大小,比如形状为(m, n)的矩阵和(n, p)的矩阵相乘,结果是(m, p)的矩阵。

它还支持更高维的张量运算,比如处理批量矩阵:如果输入是(batch_size, m, n)和(batch_size, n, p),结果就是(batch_size, m, p),会自动对每个batch单独做矩阵乘法。

代码例子

importtorch# 二维矩阵乘法a=torch.tensor([[1,2],[3,4]])# 形状(2,2)b=torch.tensor([[5,6],[7,8]])# 形状(2,2)result1=a @ b result2=torch.matmul(a,b)print("矩阵乘法结果(@):\n",result1)print("矩阵乘法结果(torch.matmul):\n",result2)# 批量矩阵乘法batch_a=torch.randn(3,2,3)# 3个(2,3)的矩阵batch_b=torch.randn(3,3,4)# 3个(3,4)的矩阵result3=batch_a @ batch_bprint("批量矩阵乘法结果形状:",result3.shape)

输出结果

矩阵乘法结果(@): tensor([[19, 22], [43, 50]]) 矩阵乘法结果(torch.matmul): tensor([[19, 22], [43, 50]]) 批量矩阵乘法结果形状: torch.Size([3, 2, 4])

这里@同样是torch.matmul()的语法糖,对于二维矩阵来说,两者完全等价;高维张量运算时,torch.matmul()会自动识别批量维度,非常适合深度学习里的批量数据处理。

三、向量点积:torch.dot()

原理

专门用于两个一维张量(向量)的点积,即对应元素相乘后求和,要求两个向量的长度必须相同。注意它只能处理一维张量,输入高维张量会报错。

代码例子

importtorch a=torch.tensor([1,2,3])b=torch.tensor([4,5,6])result=torch.dot(a,b)print("向量点积结果:",result)

输出结果

向量点积结果: tensor(32)

计算过程是14 + 25 + 3*6 = 4+10+18=32,和数学上的点积定义完全一致。

四、批量矩阵乘法专用:torch.bmm()

原理

torch.matmul()的批量矩阵乘法类似,但它要求输入必须是三维张量,且第一个维度是batch_size,后面两个维度是矩阵的行和列,即输入形状为(batch_size, m, n)和(batch_size, n, p),输出是(batch_size, m, p)。

它的限制比torch.matmul()更严格,不支持广播,必须保证两个输入的batch_size一致,且中间维度匹配。

代码例子

importtorch batch_a=torch.randn(2,3,4)# 2个(3,4)的矩阵batch_b=torch.randn(2,4,5)# 2个(4,5)的矩阵result=torch.bmm(batch_a,batch_b)print("torch.bmm结果形状:",result.shape)

输出结果

torch.bmm结果形状: torch.Size([2, 3, 5])

如果尝试输入非三维张量,比如二维矩阵,torch.bmm()会直接报错,适合明确知道是批量矩阵乘法的场景,避免不小心触发广播导致错误。

五、总结对比

乘法方式运算逻辑形状要求适用场景
* / torch.mul()逐元素相乘形状相同或满足广播对应元素的乘积运算
@ / torch.matmul()矩阵/批量矩阵乘法第一个最后一维=第二个倒数第二维,支持广播线性变换、网络层运算
torch.dot()一维向量点积必须是一维张量,长度相同向量相似度计算等
torch.bmm()三维批量矩阵乘法必须是三维张量,batch_size一致,中间维度匹配明确的批量矩阵运算,避免广播

人能力有限,有问题随时联系。

http://www.jsqmd.com/news/899064/

相关文章:

  • 上海装修公司综合实力测评 - 资讯纵览
  • 紧急预警:AI歌词版权雷区已升级!ChatGPT辅助创作合规指南(含中国音著协2024最新备案流程)
  • 最新!2026生物除臭箱厂家精选推荐:综合实力与实用性能参考 - 资讯快报
  • 2026年当前济南GEO服务市场格局与头部企业深度解析 - 资讯纵览
  • 嵌入式图像处理(五):整合 —— 从单一帧到完整质量报告
  • APISIX 限流插件 `limit-count`
  • 如何永久保存微信聊天记录:开源工具的完整解决方案
  • 从机器学习基础到 MLP(下):神经网络为什么能起作用?
  • 2026年全国校园餐智慧监管平台品牌深度调研榜单(最新版) - 资讯快报
  • 网球手链品牌TOP5实测:戴过才知道这3款最值得入! - 资讯纵览
  • 这款 Gitee 低代码平台太狠了!零代码搭建系统,Java 程序员要失业了?
  • 落地复盘:AI Coding 助手在 50 人研发团队中的 6 个月实战报告
  • 论文榨汁机 · 用多智能体对话榨干每篇论文的精华
  • 强品牌,真赋能:嘉宝莉石艺漆两场渠道推广会圆满收官 - 资讯快报
  • 观察在ubuntu环境下通过taotoken调用大模型的延迟与稳定性表现
  • 终极指南:5分钟掌握webMAN MOD,让你的PS3变身全能游戏中心
  • Codex 桌面版 使用国内大模型系列一 | EchoBird
  • 小米 MiMo-V2.5 最高降价 99%:Token 战争背后,是一套押注 Agent 的工程算盘
  • Java 文件操作与 IO 流入门:从基础到实战,新手必看全攻略
  • MCP博客园工具集成测试v3
  • AI Coding 助手的未来:从补全到自主编程的演进与工程准备
  • 2026上海二奢回收避坑指南|6大维度实测,这几家零投诉门店公开 - GrowthUME
  • 2026年5月惠州设计装修行业研究报告:高性价比排行榜揭晓 - 资讯纵览
  • 2026年夹钳式超声波流量计十大品牌:十家优选深度解析 - 科技焦点
  • FPGA实现ANU轻量级密码:4位到32位数据路径架构的权衡与实践
  • 热度暴跌 99%!基于OpenClaw的腾讯套壳QClaw还值得用吗?
  • 2026年中山全屋照明灯具采购厂家筛选标准出炉 宏盟照明凭综合实力稳居行业优选首位 - 资讯纵览
  • 2026年宿迁木门厂家推荐榜:宿迁木门定做、宿迁铝门定做厂家选择指南,成艺门业的场景化工艺切入 - 海棠依旧大
  • 求解全局优化问题几类填充罚函数及算法【附代码】
  • 2026海南代理记账怎么选?5家靠谱机构实测排行榜,做账报税不踩坑 - 资讯快报