【Pytorch】进阶学习:实现矩阵乘法---torch.mul() 、 torch.mm() 和torch.matmul()的区别

【Pytorch】进阶学习:实现矩阵乘法---torch.mul() 、 torch.mm() 和torch.matmul()的区别

🌈 个人主页:高斯小哥

🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化Python基础【高质量合集】PyTorch零基础入门教程👈 希望得到您的订阅和支持~

💡 创作高质量博文(平均质量分92+),分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)


🌵文章目录🌵

🚀一、引言

在深度学习和神经网络的世界里,矩阵乘法是一项至关重要的操作。PyTorch作为目前最流行的深度学习框架之一,提供了多种矩阵乘法的实现方式。其中,torch.mul()torch.mm()torch.matmul()是三个常用的函数,但它们在用法和功能上却有所不同。本文将详细解释这三个函数的区别,并通过实例演示它们的使用方法。

🔍二、torch.mul():元素级别的乘法

torch.mul()函数用于执行元素级别的乘法,即对应位置的元素相乘。这个函数对于两个形状相同的张量特别有用。

python 复制代码
import torch

# 创建两个形状相同的张量
tensor1 = torch.tensor([[1, 2], [3, 4]])
tensor2 = torch.tensor([[5, 6], [7, 8]])

# 使用torch.mul()进行元素级别的乘法
result_mul = torch.mul(tensor1, tensor2)
print(result_mul)

输出:

less 复制代码
tensor([[ 5, 12],
        [21, 32]])

如你所见,torch.mul()tensor1tensor2对应位置的元素相乘,得到一个新的张量。

🔩三、torch.mm():矩阵乘法(只适用于二维张量)

torch.mm()函数用于执行矩阵乘法,但它只适用于二维张量(即矩阵)。如果你试图对高于二维的张量使用torch.mm(),将会得到一个错误。

python 复制代码
# 创建两个二维张量
matrix1 = torch.tensor([[1, 2], [3, 4]])
matrix2 = torch.tensor([[5, 6], [7, 8]])

# 使用torch.mm()进行矩阵乘法
result_mm = torch.mm(matrix1, matrix2)
print(result_mm)

输出:

less 复制代码
tensor([[19, 22],
        [43, 50]])

注意,矩阵乘法的规则是第一个矩阵的列数必须与第二个矩阵的行数相同。在上面的例子中,matrix1是一个2x2的矩阵,matrix2也是一个2x2的矩阵,所以它们可以进行矩阵乘法。

🎛️四、torch.matmul():广义的矩阵乘法(适用于任意维度张量)

torch.matmul()函数提供了更广泛的矩阵乘法功能,它可以处理任意维度的张量。这个函数会按照张量的维度自动进行合适的乘法操作。

python 复制代码
import torch


# 创建两个二维张量
matrix1 = torch.tensor([[1, 2], [3, 4]])
matrix2 = torch.tensor([[5, 6], [7, 8]])

# 使用torch.mm()进行矩阵乘法
result_mm = torch.mm(matrix1, matrix2)
print(result_mm)

# 对于二维张量,torch.matmul()与torch.mm()行为相同
result_matmul_2d = torch.matmul(matrix1, matrix2)
print(result_matmul_2d)

# 对于高于二维的张量,torch.matmul()可以执行广播和批量矩阵乘法
tensor3d_1 = torch.randn(3, 2, 4)  # 3个2x4的矩阵
tensor3d_2 = torch.randn(3, 4, 5)  # 3个4x5的矩阵

# 批量矩阵乘法
result_matmul_3d = torch.matmul(tensor3d_1, tensor3d_2)
print(result_matmul_3d.shape)  # 输出应为(3, 2, 5),表示3个2x5的矩阵

输出:

less 复制代码
tensor([[19, 22],
        [43, 50]])
tensor([[19, 22],
        [43, 50]])
torch.Size([3, 2, 5])

torch.matmul()函数非常灵活,它可以处理各种复杂的张量乘法场景。

🔎五、总结与注意事项

总结一下,torch.mul()torch.mm()torch.matmul()这三个函数的主要区别在于它们处理张量的方式和维度要求不同。torch.mul()执行的是元素级别的乘法,要求输入张量形状相同;torch.mm()执行的是标准的矩阵乘法,只适用于二维张量;而torch.matmul()则提供了更广义的矩阵乘法,可以处理任意维度的张量,包括批量矩阵乘法。

在使用这些函数时,需要注意以下几点:

  1. 确保输入张量的形状符合函数的要求,否则可能会引发错误。
  2. 对于矩阵乘法,需要注意矩阵的维度匹配问题,即第一个矩阵的列数必须等于第二个矩阵的行数。
  3. 在进行批量矩阵乘法时,使用torch.matmul()可以方便地处理多个矩阵的乘法运算。

🤝六、期待与你共同进步

🌱 亲爱的读者,非常感谢你每一次的停留和阅读!你的支持是我们前行的最大动力!🙏

🌐 在这茫茫网海中,有你的关注,我们深感荣幸。你的每一次点赞👍、收藏🌟、评论💬和关注💖,都像是明灯一样照亮我们前行的道路,给予我们无比的鼓舞和力量。🌟

📚 我们会继续努力,为你呈现更多精彩和有深度的内容。同时,我们非常欢迎你在评论区留下你的宝贵意见和建议,让我们共同进步,共同成长!💬

💪 无论你在编程的道路上遇到什么困难,都希望你能坚持下去,因为每一次的挫折都是通往成功的必经之路。我们期待与你一起书写编程的精彩篇章! 🎉

🌈 最后,再次感谢你的厚爱与支持!愿你在编程的道路上越走越远,收获满满的成就和喜悦!祝你编程愉快!🎉

相关推荐
奔跑吧邓邓子4 分钟前
DeepSeek 赋能智能教育知识图谱:从构建到应用的革命性突破
人工智能·知识图谱·应用·deepseek·智能教育
Mantanmu7 分钟前
Python训练day40
人工智能·python·机器学习
天天爱吃肉821811 分钟前
新能源汽车热管理核心技术解析:冬季续航提升40%的行业方案
android·python·嵌入式硬件·汽车
Psycho_MrZhang12 分钟前
高等数学基础(矩阵基本操作转置和逆矩阵)
线性代数·矩阵
ss.li13 分钟前
TripGenie:畅游济南旅行规划助手:个人工作纪实(二十二)
javascript·人工智能·python
小天才才23 分钟前
前沿论文汇总(机器学习/深度学习/大模型/搜广推/自然语言处理)
人工智能·深度学习·机器学习·自然语言处理
l木本I26 分钟前
大模型低秩微调技术 LoRA 深度解析与实践
python·深度学习·自然语言处理·lstm·transformer
哆啦A梦的口袋呀30 分钟前
基于Python学习《Head First设计模式》第七章 适配器和外观模式
python·学习·设计模式
恰薯条的屑海鸥33 分钟前
零基础在实践中学习网络安全-皮卡丘靶场(第十期-Over Permission 模块)
学习·安全·web安全·渗透测试·网络安全学习
十月狐狸33 分钟前
Python字符串进化史:从青涩到成熟的蜕变
python