pytorch矩阵乘法总结

news/2024/7/7 20:16:51

1. element-wise(*) 按元素相乘,支持广播,等价于torch.mul()

a = torch.tensor([[1, 2], 
								 [3, 4]])
b = torch.tensor([[2, 3], 
								 [4, 5]])
c = a*b  # 等价于torch.mul(a,b)
# tensor([[ 2,  6],
#        [12, 20]])
a * torch.tensor([1, 2]) # 广播,等价于torch.mul(a, torch.tensor([1, 2]))
# tensor([[1, 4],
#        [3, 8]])
a * torch.tensor([2])  # 乘以单个元素,依然是广播,等价于torch.mul(a, torch.tensor([2]))
# tensor([[1, 4],
#         [3, 8]])

2. torch.mm(), 实现矩阵叉乘,即第一个矩阵的列数等于第二个矩阵的行数,不支持广播。

a = torch.arange(9).reshape(3, 3)
b = torch.arange(12).reshape(3, 4)
torch.mm(a, b)
#tensor([[ 20,  23,  26,  29],
#        [ 56,  68,  80,  92],
#        [ 92, 113, 134, 155]])

3. torch.bmm(),三维矩阵乘法,第一个维度是batch_size的大小。两个矩阵的batch_size大小要相等。

a = torch.arange(9).reshape(1,3, 3)
b = torch.arange(12).reshape(1,3, 4)
torch.bmm(a, b)
# tensor([[[ 20,  23,  26,  29],
#         [ 56,  68,  80,  92],
#         [ 92, 113, 134, 155]]])

4. torch.matmul(), 混合矩阵乘法

4.1 都是一维,进行点积运算

在这里插入图片描述

4.2 都是二维,返回矩阵叉乘

在这里插入图片描述

4.3 向量乘以矩阵

在这里插入图片描述

4.4 矩阵乘以向量

在这里插入图片描述

4.5 一维向量乘以多维矩阵

# 如果两个参数都是至少1个维度,并且至少一个参数是3维,那么返回一个batched矩阵乘法。
# 一维向量乘以多维矩阵
c = torch.arange(6).reshape(1,2, 3)
d = torch.tensor([2, 1])

e = torch.matmul(d, c)  # d前置增加一个维度,然后在batch_size维度进行广播
e
# tensor([[3, 6, 9]])

4.6 多维矩阵乘以一维向量

e = torch.arange(2).reshape(1, 1, 2)
# 多维维矩阵乘以向量,向量在后面增加一个维度,然后在batch_size维度进行广播
f = torch.tensor([2, 4])  # 变成[[2], [4]]
g = torch.matmul(e, f)
g
# tensor([[4]])

4.7 最后两个维度没有一维向量

最后两个维度进行矩阵叉乘,前面的维度进行广播进行计算。
感兴趣的可以看看文档:https://pytorch.org/docs/stable/generated/torch.matmul.html#torch.matmul
在这里插入图片描述

5 torch.einsum()

参考该链接:https://zhuanlan.zhihu.com/p/434232512

6 Reference:

[1] https://huaweicloud.csdn.net/63807229dacf622b8df8865b.html
[2] https://pytorch.org/docs/stable/generated/torch.matmul.html#torch.matmul


http://lihuaxi.xjx100.cn/news/1103421.html

相关文章

不废话!CentOS 8 安装docker的详细过程

目录 1.更新系统 2. 安装依赖包 3.添加 Docker YUM 仓库 4.安装 Docker 5.启动 Docker 6.设置 Docker 开机自启 7.测试 Docker 1.更新系统 dnf update 这里直接输入y,耐心等待更新即可 直到看到complete表示更新完毕 2. 安装依赖包 Docker 需要一些依赖包才能正常…

Django框架之模型自定义管理器

类属性 objects 是manager类的一个对象,作用是与数据库进行交互。 当定义模型类没有指定管理器,django会为模型创建objects管理器。 表结构与数据 CREATE TABLE myapp_grades (id int(11) NOT NULL AUTO_INCREMENT,name varchar(20) NOT NULL,boy_num…

Kali Linux 配置动态/静态 IP

[笔者系统版本] [Kali]: Kali Linux 2023.1 [Kernel]: kernel 6.1.0 [Desktop]: Xfce 4.18.1 1. Kali Linux 配置动态 IP (1). 首先查看网卡接口名称。 (2). 编辑网络接口配置文件。 (3). 网络接口配置文件的默认内容是这样的。 (4). 新增配置内容如下; 指定网卡…

【Linux】Linux学习之常用命令一

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

helm和chart

Helm helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。Helm Chart 是用来封装 Kubernetes 原生应用程序的一系列 YAML 文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。 he…

SwiftUI 新 Alert 弹出窗口圆你文本输入之梦

概览 小伙伴们都知道,弹出 Alert 不能包含文本输入框是 SwiftUI 的阿喀琉斯之踵(Achilles’ Heel) 。当然,这说的有些夸张了。😉 不过,Alert 不能包含 TextField 在某些情况下着实不方便。于是乎,从 SwiftUI 3.0&…

硬件-6-基站和移动通信系统的演进

1G、2G、3G、4G、5G 移动通信技术发展简史 1 移动通信系统简介 移动通信系统从第一代移动通信系统(1G)开始逐渐发展,目前已经发展到第四代移动通信系统(4G),第五代移动通信系统(5G)也已经开始标准化,预计2020年商用,6G预计2030年…

【无标题】nn.Conv2d参数详解及输入特征图尺寸的计算

在 PyTorch 中,nn.Conv2d 是一个实现了二维卷积(convolution)函数的神经网络模块。Conv2d 模块的核心部分即卷积运算,其接受的参数包括: in_channels:输入特征图(feature map)的通道…