位置: IT常识 - 正文

【Pytorch】torch. matmul()(pytorch .pt)

编辑:rootadmin
【Pytorch】torch. matmul() 目录简介torch.matmul()语法作用举例情形1: 一维 * 一维情形2: 二维 * 二维情形3: 一维 * 二维情形4: 二维 * 一维情形5:两个参数至少为一维且至少一个参数为 N 维(其中 N > 2),则返回**批处理矩阵乘法**第一个参数为N维,第二个参数为一维时第一个参数为一维,第二个参数为二维时高维 * 高维时参考结语

推荐整理分享【Pytorch】torch. matmul()(pytorch .pt),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:pytorch torchscript,pytorch torchscript,pytorch.optim,pytorch torch.load,pytorchtools,pytorch with torch.nograd,pytorch with torch.nograd,pytorch with torch.nograd,内容如对您有帮助,希望把文章链接给更多的朋友!

简介

Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~   ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研 学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!   唯有努力💪   本文仅记录自己感兴趣的内容

torch.matmul()语法

torch.matmul(input, other, *, out=None) → Tensor

作用

两个张量的矩阵乘积

行为取决于张量的维度,如下所示:

如果两个张量都是一维的,则返回点积(标量)。如果两个参数都是二维的,则返回矩阵-矩阵乘积。如果第一个参数是一维的,第二个参数是二维的,为了矩阵乘法的目的,在它的维数前面加上一个 1。在矩阵相乘之后,前置维度被移除。如果第一个参数是二维的,第二个参数是一维的,则返回矩阵向量积。如果两个参数至少为一维且至少一个参数为 N 维(其中 N > 2),则返回批处理矩阵乘法如果第一个参数是一维的,则将 1 添加到其维度,以便批量矩阵相乘并在之后删除。如果第二个参数是一维的,则将 1 附加到其维度以用于批量矩阵倍数并在之后删除非矩阵(即批次)维度是广播的(因此必须是可广播的)例如,如果输入是(j×1×n×n)(j \times 1 \times n \times n)(j×1×n×n) 张量另一个是 (k×n×n)(k \times n \times n)(k×n×n)张量,out 将是一个 (j×k×n×n)(j \times k \times n \times n)(j×k×n×n) 张量

请注意,广播逻辑在确定输入是否可广播时仅查看批处理维度,而不是矩阵维度

例如

如果输入是 (j×1×n×m)(j \times 1 \times n \times m)(j×1×n×m) 张量另一个是 (k×m×p)(k \times m \times p)(k×m×p) 张量即使最后两个维度(即矩阵维度)不同,这些输入对于广播也是有效的out 将是一个 (j×k×n×p)(j \times k \times n \times p)(j×k×n×p) 张量

该运算符支持 TensorFloat32。

在某些 ROCm 设备上,当使用 float16 输入时,此模块将使用不同的向后精度

举例情形1: 一维 * 一维

如果两个张量都是一维的,则返回点积(标量)

tensor1 = torch.Tensor([1,2,3])tensor2 =torch.Tensor([4,5,6])ans = torch.matmul(tensor1, tensor2)print('tensor1 : ', tensor1)print('tensor2 : ', tensor2)print('ans :', ans)print('ans.size :', ans.size())

ans = 1 * 4 + 2 * 5 + 3 * 6 = 32

情形2: 二维 * 二维

如果两个参数都是二维的,则返回矩阵-矩阵乘积 也就是 正常的矩阵乘法 (m * n) * (n * k) = (m * k)

tensor1 = torch.Tensor([[1,2,3],[1,2,3]])tensor2 =torch.Tensor([[4,5],[4,5],[4,5]])ans = torch.matmul(tensor1, tensor2)print('tensor1 : ', tensor1)print('tensor2 : ', tensor2)print('ans :', ans)print('ans.size :', ans.size())

情形3: 一维 * 二维

如果第一个参数是一维的,第二个参数是二维的,为了矩阵乘法的目的,在它的维数前面加上一个 1 在矩阵相乘之后,前置维度被移除

tensor1 = torch.Tensor([1,2,3]) # 注意这里是一维tensor2 =torch.Tensor([[4,5],[4,5],[4,5]])ans = torch.matmul(tensor1, tensor2)print('tensor1 : ', tensor1)print('tensor2 : ', tensor2)print('ans :', ans)print('ans.size :', ans.size())

tensor1 = torch.Tensor([1,2,3]) 修改为 tensor1 = torch.Tensor([[1,2,3]])

发现一个结果是[24., 30.] 一个是[[24., 30.]]

【Pytorch】torch. matmul()(pytorch .pt)

所以,当一维 * 二维时, 开始变成 1 * m(一维的维度),也就是一个二维, 再进行正常的矩阵运算,得到[[24., 30.]], 然后再去掉开始增加的一个维度,得到[24., 30.]

想象为二维 * 二维(前置维度为1),最后结果去掉一个维度即可

情形4: 二维 * 一维

如果第一个参数是二维的,第二个参数是一维的,则返回矩阵向量积

tensor1 =torch.Tensor([[4,5,6],[7,8,9]])tensor2 = torch.Tensor([1,2,3])ans = torch.matmul(tensor1, tensor2)print('tensor1 : ', tensor1)print('tensor2 : ', tensor2)print('ans :', ans)print('ans.size :', ans.size())

理解为:

把第一个二维中,想象为多个行向量第二个一维想象为一个列向量行向量与列向量进行矩阵乘法,得到一个标量再按照行堆叠起来即可

情形5:两个参数至少为一维且至少一个参数为 N 维(其中 N > 2),则返回批处理矩阵乘法第一个参数为N维,第二个参数为一维时tensor1 = torch.randn(10, 3, 4)tensor2 = torch.randn(4)print(torch.matmul(tensor1, tensor2).size())

(4) 先添加一个维度 (4 * 1) 得到(10 * 3 * 4) *( 4 * 1) = (10 * 3 * 1) 再删除最后一个维度(添加的那个) 得到结果(10 * 3)

tensor1 = torch.randn(10,2, 3, 4) #tensor2 = torch.randn(4)print(torch.matmul(tensor1, tensor2).size())

(10 * 2 * 3 * 4) * (4 * 1) = (10 * 2 * 3) 【抵消4,删1】

第一个参数为一维,第二个参数为二维时tensor1 = torch.randn(4)tensor2 = torch.randn(10, 4, 3)print(torch.matmul(tensor1, tensor2).size())

tensor2 中第一个10理解为批次, 10个(4 * 3) (1 * 4)与每个(4 * 3) 相乘得到(1,3),去除1,得到(3) 批次为10,得到(10,3)

tensor1 = torch.randn(4)tensor2 = torch.randn(10,2, 4, 3)print(torch.matmul(tensor1, tensor2).size())

这里批次理解为[10, 2]即可

tensor1 = torch.randn(4)tensor2 = torch.randn(10,4, 2,4,1)print(torch.matmul(tensor1, tensor2).size())

个人理解:当一个参数为一维时,它要去匹配另一个参数的最后两个维度(二维 * 二维)

比如上面的例子就是(1 * 4) 匹配 (4,1), 批次为(10,4,2)

高维 * 高维时

注:这不太好理解 … 感觉就是要找准批次,再进行乘法(靠感觉了 哈哈 离谱)

参考https://pytorch.org/docs/stable/generated/torch.matmul.html#torch.matmul结语

文章仅作为个人学习笔记记录,记录从0到1的一个过程

希望对您有一点点帮助,如有错误欢迎小伙伴指正

本文链接地址:https://www.jiuchutong.com/zhishi/300618.html 转载请保留说明!

上一篇:干货!​如何打造我们自己的“ChatGPT”?| 大佬思辨

下一篇:一文看懂Transformer(详解)(一文看懂华为新品发布会)

  • 华为nova 5i pro和荣耀9xpro对比(华为nova5ipro和华为nova5)

    华为nova 5i pro和荣耀9xpro对比(华为nova5ipro和华为nova5)

  • 掌上工商注册认证失败(掌上工商app注册)

    掌上工商注册认证失败(掌上工商app注册)

  • 为什么发快手就闪退(为什么发快手就掉粉了)

    为什么发快手就闪退(为什么发快手就掉粉了)

  • iphone如何阻止陌生来电(iphone如何阻止陌生人来电)

    iphone如何阻止陌生来电(iphone如何阻止陌生人来电)

  • 微信小黄脸表情含义(微信小黄脸表情包)

    微信小黄脸表情含义(微信小黄脸表情包)

  • 为什么找不到撤销退款(为什么找不到撤销退货退款申请)

    为什么找不到撤销退款(为什么找不到撤销退货退款申请)

  • iphone7p无服务怎么恢复(iphone7p 无服务)

    iphone7p无服务怎么恢复(iphone7p 无服务)

  • 录音没有声音怎么回事(录音没有声音怎么办OPPO)

    录音没有声音怎么回事(录音没有声音怎么办OPPO)

  • 荣耀v30pro支持几个5g频段(荣耀v30pro支持n28)

    荣耀v30pro支持几个5g频段(荣耀v30pro支持n28)

  • qq字符怎么取消(qq怎样取消字符)

    qq字符怎么取消(qq怎样取消字符)

  • qq离线请留言是什么状态(qq离线请留言是真的不在线吗)

    qq离线请留言是什么状态(qq离线请留言是真的不在线吗)

  • 电影镜头和单反镜头的区别(电影镜头和单反镜头对比图)

    电影镜头和单反镜头的区别(电影镜头和单反镜头对比图)

  • 单元格地址是指(单元格地址是指什么)

    单元格地址是指(单元格地址是指什么)

  • 为什么面容突然不能用了(为什么面容突然识别不了)

    为什么面容突然不能用了(为什么面容突然识别不了)

  • 检查代理服务器和防火墙是什么意思(检查代理服务器和防火墙怎么弄啊)

    检查代理服务器和防火墙是什么意思(检查代理服务器和防火墙怎么弄啊)

  • 华为nova怎么修改时间(华为nova怎么修改应用图标)

    华为nova怎么修改时间(华为nova怎么修改应用图标)

  • 手机不对焦了怎么回事(手机不对焦怎么维修)

    手机不对焦了怎么回事(手机不对焦怎么维修)

  • word怎么画横线(电脑word怎么画横线)

    word怎么画横线(电脑word怎么画横线)

  • 苹果icloud满了会卡吗(苹果icloud满了会收不到短信吗)

    苹果icloud满了会卡吗(苹果icloud满了会收不到短信吗)

  • iphonex通话听筒没声音(苹果x听筒打电话有杂音)

    iphonex通话听筒没声音(苹果x听筒打电话有杂音)

  • 拼多多我的钱包在哪里(下载拼多多我的钱包)

    拼多多我的钱包在哪里(下载拼多多我的钱包)

  • 卡贴机换卡要换卡贴吗(卡贴机换新卡贴可以用不)

    卡贴机换卡要换卡贴吗(卡贴机换新卡贴可以用不)

  • 如何查找打印机(如何查找打印机的驱动程序)

    如何查找打印机(如何查找打印机的驱动程序)

  • 怎么表达5g时代的具体含义(描述5g时代的一段话100字)

    怎么表达5g时代的具体含义(描述5g时代的一段话100字)

  • 新版陌陌阅后即焚在哪(陌陌阅后即焚功能在哪打开)

    新版陌陌阅后即焚在哪(陌陌阅后即焚功能在哪打开)

  • 华为人工智能叫什么(华为人工智能叫什么英文名)

    华为人工智能叫什么(华为人工智能叫什么英文名)

  • 微信提现在哪里操作(微信提现在哪里查看记录)

    微信提现在哪里操作(微信提现在哪里查看记录)

  • cad坐标查询与原标注不符(cad坐标查询与原坐标不符)

    cad坐标查询与原标注不符(cad坐标查询与原坐标不符)

  • 【Linux】CUDA Toolkit和cuDNN版本对应关系(更新至2022年6月,附官网永久更新链接)(linux安装cuda的正确姿势)

    【Linux】CUDA Toolkit和cuDNN版本对应关系(更新至2022年6月,附官网永久更新链接)(linux安装cuda的正确姿势)

  • 小规模企业税务登记流程
  • 企业发生的职工培训费应计入产品的制造成本
  • 机械租赁属于什么分类
  • 上期留抵税额会计分录
  • 多开票要交多少税
  • 分公司独立核算的利弊
  • 付款给对方未开具发票
  • 应收票据和应收账款的区别举例
  • 企业卖旧房如何计算缴纳土地增值税
  • 房产税收取标准有哪些
  • 可以用来办理贴现的票据
  • 职工暖气费报销算福利
  • 驾校挂靠车辆账务处理?
  • 新会计准则适用企业
  • 装修改造增值税税率
  • 当月不抵扣的增值税发票怎么做账
  • 去国税申请开票需要法人和财务去吗?
  • 如何理解增值税的三种类型?它们的区别是什么?
  • win10下载软件被阻止安装怎么办
  • 市净率怎么计算举例说明
  • 社保缴费要和工龄一致吗
  • 施工图审查费入哪个科目
  • 一次性支付一年租金怎么做账
  • 公司为员工缴纳社保的基数怎么确定
  • npfmntor.exe - npfmntor是什么进程 有什么用
  • 工商注册经营部和公司的区别
  • 营改增开始时间
  • 源码阅读技巧
  • spring 异常
  • php采集系统
  • 滴滴发票4月1日怎么开
  • 小规模企业做账表格
  • 持有至到期投资账务处理
  • 使用灭火器人要站在上风口还是下风口
  • 移动端页设计
  • php 循环
  • 收回外币应收账款如何处理
  • 进项税加计抵减是什么意思
  • 入库税款异常怎么处理
  • 小规模增值税结转账务处理
  • mysqldump -r
  • Mongodb中MapReduce实现数据聚合方法详解
  • 织梦如何使用
  • 扶贫款分红怎么做账
  • 预付卡发票如何开
  • sql server 2008r2连接
  • 发票有种类型
  • sql语句批量添加数据
  • 劳务分包劳务费付款比例
  • 员工报销货款会计分录怎么写
  • 结转以前年度成本分录怎么写
  • 开具发票涉及到哪些会计科目?
  • 现金不够老板垫钱怎么办
  • 跨月报销的凭证有哪些
  • 暂估未取得发票汇缴纳税调增怎么填
  • 交通费属于什么部门
  • 应付账款暂估可以法人付款吗
  • 企业享受所得税免税政策
  • amd furyx
  • fedora最新版
  • winxp系统怎么装
  • 明日之后白树高地怎么钓凤尾鱼
  • kmsss.exe是什么
  • win8个性化外观恢复默认设置
  • Android OpenGL ES(六)----进入三维在代码中创建投影矩阵和旋转矩阵
  • shell脚本 $?
  • 硬盘逻辑锁源码
  • preorder遍历
  • perl的$_
  • 菜单下一章
  • mkdirs linux
  • jquery瀑布流代码
  • python中按下某个按键
  • js中的div标签怎么用
  • js根据name取值
  • python特性和属性
  • python 汉诺塔
  • 人脸识别身份验证
  • 浙江省网上税务局app下载
  • 税收筹划六种方法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设