PyTorch中matmul函数的矩阵相乘原则和注意事项

PyTorch中matmul函数的矩阵相乘原则和注意事项

一、高维张量乘法规则

1. 选择乘法的维度: 选择最后两个维度进行乘
2. 维度匹配规则: 最后两个维度按照普通矩阵乘法计算
3. 广播机制: torch.matmul 函数支持广播机制,即在满足乘法维度匹配规则的前提下,可以通过扩展(广播)其他维度来实现矩阵相乘。这使得可以对不同形状的张量进行相乘。

4. 结果张量的形形状:

最后2维为矩阵乘法正常计算完成应该有的维度,而高维则以参与计算的两个矩阵中,维度更大的那个矩阵的维度为准。

为什么是这样,因为其实高维矩阵的乘法就是分别从高维中选取对应位置的一对矩阵(普通矩阵)相乘把高维都遍历完了,整个高维矩阵乘法也就完成了。

那么原参与计算的矩阵形状,高维有多大,计算结果就应该有多大(因为高维只遍历)

⭐⭐⭐一言以蔽之 :除最后两维外,每一维的分量数必须对应相等 (每个分量对应相乘) 或 有一方为1(broadcast-广播机制)

二、二维矩阵相乘

线性代数基本知识,就不多讲了

python 复制代码
import torch

# 创建两个二维矩阵
A = torch.tensor([[1, 2],
                  [3, 4]])
B = torch.tensor([[5, 6],
                  [7, 8]])

# 使用 matmul 进行二维矩阵相乘
C = torch.matmul(A, B)
print("二维矩阵相乘结果:")
print(C)

输出结果:

python 复制代码
二维矩阵相乘结果:
tensor([[19, 22],
        [43, 50]])

三、三维张量相乘

对于两个三维张量 A 和 B,我们可以选择其中的最后两个维度进行相乘。

python 复制代码
import torch

# 创建两个三维张量
A = torch.randn(2, 3, 4)
B = torch.randn(2, 4, 5)

# 使用 matmul 进行三维张量相乘
C = torch.matmul(A, B)
print("三维张量相乘结果的形状:")
print(C.shape)

输出结果:

三维张量相乘结果的形状:
torch.Size([2, 3, 5])

在这个示例中,张量 A 的形状是 [2, 3, 4],张量 B 的形状是 [2, 4, 5],我们对最后两个维度进行了矩阵相乘,得到的结果张量 C 的形状是 [2, 3, 5]

四、三维张量广播相乘示例

python 复制代码
import torch

# 创建两个可以广播的张量
a = torch.randn(2, 3, 4)
b = torch.randn(4, 5)

# 使用 torch.matmul 进行广播机制的矩阵乘法
result = torch.matmul(a, b)
print("广播机制下的矩阵乘法结果的形状:")
print(result.sha

输出

python 复制代码
广播机制下的矩阵乘法结果的形状:
torch.Size([2, 3, 5])

五、高维张量相乘

最后,我们考虑更高维度的情况,例如四维张量。对于四维张量 A 和 B,我们选择最后两个维度进行相乘。

python 复制代码
# 创建两个四维张量
A = torch.randn(2, 3, 4, 5)
B = torch.randn(2, 3, 5, 6)

# 使用 matmul 进行四维张量相乘
C = torch.matmul(A, B)
print("四维张量相乘结果的形状:")
print(C.shape)

输出结果:

四维张量相乘结果的形状:
torch.Size([2, 3, 4, 6])

在这个示例中,张量 A 的形状是 [2, 3, 4, 5],张量 B 的形状是 [2, 3, 5, 6],我们对最后两个维度进行了矩阵相乘,得到的结果张量 C 的形状是 [2, 3, 4, 6]

相关推荐
迅狐源码工厂10 分钟前
TikTok短视频矩阵系统
线性代数·矩阵
云微客AI剪辑矩阵系统11 分钟前
矩阵新玩法,云微客AI矩阵系统开启新营销大门
人工智能·ai·矩阵·云微客
lose and dream_1117 分钟前
【 2024!深入了解 大语言模型(LLM)微调方法(总结)】
大数据·人工智能·opencv·机器学习·语言模型·自然语言处理·架构
x-cmd31 分钟前
[240704] 苹果获得 OpenAI 董事会观察员席位 | mySCADA myPRO 发现可在设备上远程执行代码漏洞
人工智能·安全·chatgpt·微软·openai·cve·苹果
庞德公38 分钟前
解锁Diffusion Model: 初识Stable Diffusion、DALL-E、Imagen
人工智能·stable diffusion·imagen·dall-e
AI大模型-王哥43 分钟前
神经网络入门:从零到训练
人工智能·深度学习·神经网络·大模型·ai大模型
点云侠1 小时前
matlab 干涉图仿真
开发语言·人工智能·算法·计算机视觉·matlab
逼子格1 小时前
66、基于长短期记忆 (LSTM) 网络对序列数据进行分类
人工智能·rnn·深度学习·lstm·长短期记忆网络·序列数据分类
KompasAI1 小时前
客户服务的智能升级:Kompas.ai如何改善客户体验
大数据·人工智能·aigc·语音识别·ai写作
2401_857638031 小时前
【深度解析】滑动窗口:目标检测算法的基石
人工智能·算法·目标检测