pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)

pytorch小记(一):pytorch矩阵乘法:torch.matmul(x, y)/ x @ y

      • 代码
      • 代码 1:`torch.matmul(x, y)`
        • 输入张量:
        • 计算逻辑:
        • 输出结果:
      • 代码 2:`y = y.view(4,1)` 再 `torch.matmul(x, y)`
        • 输入张量:
        • 计算逻辑:
        • 输出结果:
      • 总结:两种情况的区别


代码

x = torch.tensor([[1,2,3,4], [5,6,7,8]])
y = torch.tensor([2, 3, 1, 0]) # y.shape == (4)
print(torch.matmul(x, y))
print(x @ y)
>>>
tensor([11, 35])
tensor([11, 35])
x = torch.tensor([[1,2,3,4], [5,6,7,8]])
y = torch.tensor([2, 3, 1, 0]) # y.shape == (4)
y = y.view(4,1)                # y.shape == (4, 1)
'''
tensor([[2],[3],[1],[0]])
'''
print(torch.matmul(x, y))
print(x @ y)
>>>
tensor([[11],[35]])
tensor([[11],[35]])

在这段代码中,torch.matmul(x, y) 或者x @ y计算的是矩阵乘法或张量乘法。我们分两种情况详细分析:


代码 1:torch.matmul(x, y)

输入张量:
  • x 是一个 2D 张量,形状为 (2, 4)
    tensor([[1, 2, 3, 4],[5, 6, 7, 8]])
    
  • y 是一个 1D 张量,形状为 (4,)
    tensor([2, 3, 1, 0])
    
计算逻辑:

在 PyTorch 中,如果 matmul 的一个输入是 2D 张量,另一个是 1D 张量,计算规则是:

  • 将 1D 张量 y 当作列向量 (4, 1),与矩阵 x 进行矩阵乘法。
  • 结果是一个 1D 张量,形状为 (2,)

矩阵乘法公式:
result [ i ] = ∑ j x [ i , j ] ⋅ y [ j ] \text{result}[i] = \sum_j x[i, j] \cdot y[j] result[i]=jx[i,j]y[j]

具体计算步骤:

  1. 对第一行 [1, 2, 3, 4]
    ( 1 ⋅ 2 ) + ( 2 ⋅ 3 ) + ( 3 ⋅ 1 ) + ( 4 ⋅ 0 ) = 2 + 6 + 3 + 0 = 11 (1 \cdot 2) + (2 \cdot 3) + (3 \cdot 1) + (4 \cdot 0) = 2 + 6 + 3 + 0 = 11 (12)+(23)+(31)+(40)=2+6+3+0=11
  2. 对第二行 [5, 6, 7, 8]
    ( 5 ⋅ 2 ) + ( 6 ⋅ 3 ) + ( 7 ⋅ 1 ) + ( 8 ⋅ 0 ) = 10 + 18 + 7 + 0 = 35 (5 \cdot 2) + (6 \cdot 3) + (7 \cdot 1) + (8 \cdot 0) = 10 + 18 + 7 + 0 = 35 (52)+(63)+(71)+(80)=10+18+7+0=35
输出结果:
torch.matmul(x, y)
# tensor([11, 35])

代码 2:y = y.view(4,1)torch.matmul(x, y)

输入张量:
  • x 是同一个 2D 张量,形状为 (2, 4)
  • y 被重塑为 2D 张量,形状为 (4, 1)
    tensor([[2],[3],[1],[0]])
    
计算逻辑:

在这种情况下,matmul 执行的是 矩阵乘法,两个输入的形状为 (2, 4)(4, 1)

  • 矩阵乘法的规则是:前一个矩阵的列数必须等于后一个矩阵的行数
  • 结果张量的形状是 (2, 1)

矩阵乘法公式:
result [ i , k ] = ∑ j x [ i , j ] ⋅ y [ j , k ] \text{result}[i, k] = \sum_j x[i, j] \cdot y[j, k] result[i,k]=jx[i,j]y[j,k]

具体计算步骤:

  1. 对第一行 [1, 2, 3, 4] 和列向量 [[2], [3], [1], [0]]
    ( 1 ⋅ 2 ) + ( 2 ⋅ 3 ) + ( 3 ⋅ 1 ) + ( 4 ⋅ 0 ) = 2 + 6 + 3 + 0 = 11 (1 \cdot 2) + (2 \cdot 3) + (3 \cdot 1) + (4 \cdot 0) = 2 + 6 + 3 + 0 = 11 (12)+(23)+(31)+(40)=2+6+3+0=11
  2. 对第二行 [5, 6, 7, 8] 和列向量 [[2], [3], [1], [0]]
    ( 5 ⋅ 2 ) + ( 6 ⋅ 3 ) + ( 7 ⋅ 1 ) + ( 8 ⋅ 0 ) = 10 + 18 + 7 + 0 = 35 (5 \cdot 2) + (6 \cdot 3) + (7 \cdot 1) + (8 \cdot 0) = 10 + 18 + 7 + 0 = 35 (52)+(63)+(71)+(80)=10+18+7+0=35
输出结果:
torch.matmul(x, y)
# tensor([[11],
#         [35]])

总结:两种情况的区别

  1. y 是 1D 张量

    • torch.matmul(x, y) 返回一个 1D 张量,形状为 (2,)
    • 相当于将 y 当作列向量,与矩阵 x 做矩阵乘法。
  2. y 是 2D 张量

    • torch.matmul(x, y) 返回一个 2D 张量,形状为 (2, 1)
    • 矩阵乘法严格遵守二维矩阵的维度规则。

两者的结果数值相同,但形状不同,主要是因为输入张量的维度不同,导致输出的维度也发生了变化。

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

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

相关文章

Sentaurus TCAD学习笔记:transform指令

目录 一、transform指令简介二、transform指令的实现1.cut指令2.flip指令3.rotate指令4.stretch指令5.translate指令6.reflect指令 三、transform指令示例 一、transform指令简介 在Sentaurus中,如果需要对器件进行翻转、平移等操作,可以通过transform指…

kafka消费堆积问题探索

背景 我们的商城项目用PHP写的,原本写日志方案用的是PHP的方案,但是,这个方案导致资源消耗一直降不下来,使用了20个CPU。后面考虑使用通过kafka的方案写日志,商城中把产生的日志丢到kafka中,在以go写的项目…

【opencv】第7章 图像变换

7.1 基 于OpenCV 的 边 缘 检 测 本节中,我们将一起学习OpenCV 中边缘检测的各种算子和滤波器——Canny 算子、Sobel 算 子 、Laplacian 算子以及Scharr 滤波器。 7.1.1 边缘检测的一般步骤 在具体介绍之前,先来一起看看边缘检测的一般步骤。 1.【第…

[Qt]常用控件介绍-多元素控件-QListWidget、QTableWidget、QQTreeWidget

目录 1.多元素控件介绍 2.ListWidget控件 属性 核心方法 核心信号 细节 Demo:编辑日程 3.TableWidget控件 核心方法 QTableWidgetItem核心信号 QTableWidgetItem核心方法 细节 Demo:编辑学生信息 4.TreeWidget控件 核心方法 核心信号…

JavaScript系列(26)--安全编程实践详解

JavaScript安全编程实践详解 🔒 今天,让我们深入探讨JavaScript的安全编程实践。在当今的网络环境中,安全性已经成为开发者必须重点关注的领域。 安全编程基础 🌟 💡 小知识:JavaScript安全编程涉及多个方…

OpenGL中Shader LOD失效

1)OpenGL中Shader LOD失效 2)DoTween的GC优化 3)开发微信小程序游戏有没有类似Debug真机图形的方法 4)射线和Mesh三角面碰撞检测的算法 这是第418篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了U…

Zookeeper 数据迁移实战:基础环境搭建与高效迁移方案全览

文章目录 一、Zookeeper数据迁移简介二、迁移zookeeper数据基础环境三、利用快照迁移zookeeper数据1、Node1最新的zk快照文件和日志文件2、将被迁移方node2的zookeeper的集群全部stop3、将源node1集群数据和日志拷贝到指定目录下4、验证优先启动拷贝的数据、日志的zookeeper节点…

什么是数据仓库?

什么是数据仓库? 数据仓库(Data Warehouse,简称DW)是一种面向分析和决策的数据存储系统,它将企业中分散的、异构的数据按照一定的主题和模型进行集成和存储,为数据分析、报表生成以及商业智能(…

ubuntu支持中文的字体

在 Ubuntu 系统中,支持中文的字体可以通过安装或启用适配中文字符的字体包来实现。以下是 Ubuntu 上常用的中文字体以及安装方法: 常见支持中文的字体 思源字体系列(推荐): 思源黑体(Noto Sans CJK / Sourc…

java 迪米特法则,原理、思想、工作流程、实现细节、稳定性、优缺点、应用场景等

迪米特法则(Law of Demeter,LoD),也被称为“最少知识原则”,是一种指导面向对象设计的原则,旨在减少对象之间的耦合度。以下是对迪米特法则的详细解析。 1. 定义 迪米特法则指出:一个对象应该…

[Linux]从零开始的STM32MP157交叉编译环境配置

一、前言 最近该忙的事情也是都忙完了,也是可以开始好好的学习一下Linux了。之前九月份的时候就想入手一块Linux的开发板用来学习Linux底层开发。之前在NXP和STM32MP系列之间犹豫,思来想去还是入手了一块STM32MP157。当然不是单纯因为MP157的性能在NXP之…

小程序如何引入腾讯位置服务

小程序如何引入腾讯位置服务 1.添加服务 登录 微信公众平台 注意:小程序要企业版的 第三方服务 -> 服务 -> 开发者资源 -> 开通腾讯位置服务 在设置 -> 第三方设置 中可以看到开通的服务,如果没有就在插件管理中添加插件 2.腾讯位置服务…

添加计算机到AD域中

添加计算机到AD域中 一、确定计算机的DNS指向域中的DNS二、打开系统设置三、加域成功后 一、确定计算机的DNS指向域中的DNS 二、打开系统设置 输入域管理员的账密 三、加域成功后 这里有显示,就成功了。

你喜欢用什么编辑器?

电脑工作者和程序员所使用的文本编辑器通常需要具备高效率、易用性以及对代码友好等特点,包括语法高亮、自动完成、多文件同时编辑、查找替换、版本控制集成等功能。以下是几个广受开发者欢迎且实用性较强的文本编辑器: Visual Studio Code(V…

32单片机综合应用案例——智能家居灯光控制系统(二)(内附详细代码讲解!!!)

"即使世界看似残酷,也要坚持自己的梦想,因为只有这样,你才能创造属于自己的奇迹。”“不要害怕失败,因为失败是成功的垫脚石。”“即使跌倒了一百次,也要勇敢地爬起来一百零一次。”“永远不要低估自己的潜力&…

从epoll事件的视角探讨TCP:三次握手、四次挥手、应用层与传输层之间的联系

目录 一、应用层与TCP之间的联系 二、 当通信双方中的一方如客户端主动断开连接时,仅是在客户端的视角下连接已经断开,在服务端的眼中,连接依然存在,为什么?——触发EPOLLRDHUP事件:对端关闭连接或停止写…

使用RSyslog将Nginx Access Log写入Kafka

个人博客地址:使用RSyslog将Nginx Access Log写入Kafka | 一张假钞的真实世界 环境说明 CentOS Linux release 7.3.1611kafka_2.12-0.10.2.2nginx/1.12.2rsyslog-8.24.0-34.el7.x86_64.rpm 创建测试Topic $ ./kafka-topics.sh --zookeeper 192.168.72.25:2181/k…

设计模式02:结构型设计模式之适配器模式使用情景及其基础Demo

1.适配器模式 用途:接口兼容评价:复杂、冗余、难以调试,个人认为直接在旧系统那里封装一个新实现调用旧实现就好了场景:系统A、B、C想调用同一个功能接口,但是实现细节存在差异时(其实就是入参和出参转化处…

使用 Docker 部署 Java 项目(通俗易懂)

目录 1、下载与配置 Docker 1.1 docker下载(这里使用的是Ubuntu,Centos命令可能有不同) 1.2 配置 Docker 代理对象 2、打包当前 Java 项目 3、进行编写 DockerFile,并将对应文件传输到 Linux 中 3.1 编写 dockerfile 文件 …

大数据学习(35)- spark- action算子

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…