pytorch中的矩阵乘法操作:torch.mm(), torch.bmm(), torch.mul()和*, torch.dot(), torch.mv(), @, torch.matmul()

这篇具有很好参考价值的文章主要介绍了pytorch中的矩阵乘法操作:torch.mm(), torch.bmm(), torch.mul()和*, torch.dot(), torch.mv(), @, torch.matmul()。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

😄 无聊整理下torch里的张量的各种乘法相关操作。

0、简单提一下广播法则的定义:

  • 1、让所有输入张量都向其中shape最长的矩阵看齐,shape不足的部分在前面加1补齐。
  • 2、两个张量的维度要么在某一个维度一致,若不一致其中一个维度为1也可广播。否则不能广播。【如两个维度:(4, 1, 4)和(2, 1)可以广播,因为他们不相等的维度其中一个为1就可以广播了。】

1、torch.mm()

- 只适合于二维张量的矩阵乘法。
- m x n, n x p -> m x p

mat1 = torch.randn(2, 3)
mat2 = torch.randn(3, 4)
out = torch.mm(mat1, mat2)
out.shape
# torch.Size([2, 4])

2、torch.bmm()

- 只适合于三维张量的矩阵乘法,与torch.mm类似,但多了一个batch_size维度。
- b x m x n, b x n x p -> b x m x p

mat1 = torch.randn(8, 2, 3)
mat2 = torch.randn(8, 3, 4)
out = torch.bmm(mat1, mat2)
out.shape
# torch.Size([8, 2, 4])

3、torch.mul()和*

  • - ⭐ torch.mul()和*等价。
    - 张量对应位置元素相乘。
    - 将输入张量input的每个元素与另一个向量or标量other相乘,返回一个新的张量out,两者维度需满足广播规则
# 方式1:张量 和 标量相乘
input = torch.randn(3)
other = 100
out = torch.mul(input, other)
# 等价 out = input*other
out.shape
# torch.Size([3])

# 方式2:张量 和 张量(需满足广播规则)
input = torch.randn(4, 1, 4)
other = torch.randn(2, 1)
out = torch.mul(input, other)
# 等价 out = input*other
out.shape
# torch.Size([4, 2, 4])

# 方式3:元素对应项相乘
input = torch.randn(3, 2)
other = torch.randn(3, 2)
out = torch.mul(input, other)
# 等价 out = input*other
out.shape
# torch.Size([3, 2])

4、torch.dot()

向量点积:两向量对应位置相乘然后全部相加。只能支持两个一维向量。

5、torch.mv()

矩阵和向量的乘法

  • 第一个参数只能是二维的,第二个参数是一维的,则在其维数末尾追加一个1,以实现矩阵乘法。在矩阵相乘之后,附加的维度被删除。如shape为:(2,6)和(6)运算过程:(2,6)和(6,1) -> (2,1) -> (2)
mat1 = torch.randn(6,8)
mat2 = torch.randn(8)
out = torch.mv(mat1, mat2)
out.shape
# torch.Size([6])

6、@

torch中的@操作是可以实现前面的某几个函数,是一种强大的操作。

  • 若mat1和mat2都是两个一维向量,那么对应操作就是torch.dot()
  • 若mat1是二维向量,mat2是一维向量,那么对应操作就是torch.mv()
  • 若mat1和mat2都是两个二维向量,那么对应操作就是torch.mm()

7、torch.matmul()

torch.matmul()与@操作类似,但是torch.matmul()不止局限于一维和二维,可以进行高维张量的乘法。两个张量的矩阵乘积。其行为取决于张量的维数如下:

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

  • 2、如果两个参数都是二维的,则返回矩阵-矩阵乘积。

  • 3、如果第一个参数是二维的,第二个参数是一维的,则在其维数末尾追加一个1,以实现矩阵乘法。在矩阵相乘之后,附加的维度被删除。如shape为:(2,6)和(6)运算过程:(2,6)和(6,1) -> (2,1) -> (2)

  • 4、如果第一个参数是一维的(则在其维数前加一个1,),第二个参数是二维的,则返回矩阵乘法。在矩阵相乘之后,附加的维度被删除。如shape为:(6)和(6,2)运算过程:(1,6)和(6,2) -> (1,2) -> (2)

  • 5、对3和4的总结。如果两个参数至少是一个参数是一维的,且至少一个参数是N维的(其中N > 2),则返回一个批处理矩阵乘法。如果第一个参数是一维的,则在其维数前加上1,以便批处理矩阵相乘,然后删除。如果第二个参数是一维的,则为批处理矩阵倍数的目的,将在其维上追加一个1,然后删除它。非矩阵(即批处理)维度是广播的(因此必须是可广播的)

  • 两个参数都是N维(>2),只有非矩阵的维度才是可以广播的,最后两维需满足矩阵乘法即m x n, n x p -> m x p。如bx1xnxm, kxmxp -> jxkxnxp文章来源地址https://www.toymoban.com/news/detail-440081.html

  >>> # vector x vector
  >>> tensor1 = torch.randn(3)
  >>> tensor2 = torch.randn(3)
  >>> torch.matmul(tensor1, tensor2).size()
  torch.Size([])
  >>> # matrix x vector
  >>> tensor1 = torch.randn(3, 4)
  >>> tensor2 = torch.randn(4)
  >>> torch.matmul(tensor1, tensor2).size()
  torch.Size([3])
  >>> # batched matrix x broadcasted vector
  >>> tensor1 = torch.randn(10, 3, 4)
  >>> tensor2 = torch.randn(4)
  >>> torch.matmul(tensor1, tensor2).size()
  torch.Size([10, 3])
  >>> # batched matrix x batched matrix
  >>> tensor1 = torch.randn(10, 3, 4)
  >>> tensor2 = torch.randn(10, 4, 5)
  >>> torch.matmul(tensor1, tensor2).size()
  torch.Size([10, 3, 5])
  >>> # batched matrix x broadcasted matrix
  >>> tensor1 = torch.randn(10, 3, 4)
  >>> tensor2 = torch.randn(4, 5)
  >>> torch.matmul(tensor1, tensor2).size()
  torch.Size([10, 3, 5])

到了这里,关于pytorch中的矩阵乘法操作:torch.mm(), torch.bmm(), torch.mul()和*, torch.dot(), torch.mv(), @, torch.matmul()的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • x86汇编_MUL/IMUL乘法指令_笔记52

    32位模式下整数乘法可以实现32、16或8位的操作,64位下还可以使用64位操作数。MUL执行无符号乘法,IMUL执行有符号乘法。 MUL指令:无符号数乘法 32 位模式下,MUL(无符号数乘法)指令有三种类型: 执行 8 位操作数与 AL 寄存器的乘法; 执行 16 位操作数与 AX 寄存器的乘法;

    2024年02月07日
    浏览(39)
  • pytorch中的矩阵切片操作完全讲解

    我们经常需要从2维或3维tensor中进行切片操作,比如从mask模型中取出mask所在位置的向量。 Talk is cheap, show me code.  以下所有维度从0开始,3维即 0,1,2 ----------------------------------------------------- 另外,pytorch的函数已经为 这种切片操作准备好了,用以下代码: batch[\\\"loss_ids \\\"] 是

    2024年02月14日
    浏览(44)
  • <3>【深度学习 × PyTorch】必会 线性代数 (含详细分析):点积 | 矩阵-向量积 | Hadamard积 | 矩阵乘法 | 范数/矩阵范数

      拍照的意义在于你按下快门的那一刻,万里山河的一瞬间变成了永恒。   🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌟[2] 2022年度博客之星人工智能领域TOP4🌟   🏅[3] 阿里云社区特邀专家博主🏅   🏆[4] CSDN-人工智能领域

    2024年02月05日
    浏览(58)
  • R语言矩阵、向量操作(矩阵乘法,向量内积、外积(叉乘),矩阵转置,矩阵的逆)

    创建两个四维矩阵 A 与 B,A 按列填充,B 按行填充 : 创建两个 n 维向量 x 和 y : 使用 t(矩阵、向量名) 即可: 输出如下: 使用 %*% 符号即可: 输出如下: 在R语言中,两个矩阵、向量的内积并不只是简单的 * 号就完事了,而是有以下两种求法: 或者 其结果如下: (注意区分

    2024年02月12日
    浏览(33)
  • PyTorch中的torch.nn.Parameter() 详解

    今天来聊一下PyTorch中的torch.nn.Parameter()这个函数,笔者第一次见的时候也是大概能理解函数的用途,但是具体实现原理细节也是云里雾里,在参考了几篇博文,做过几个实验之后算是清晰了,本文在记录的同时希望给后来人一个参考,欢迎留言讨论。 先看其名,parameter,中文

    2023年04月08日
    浏览(92)
  • PyTorch中的torch.nn.Linear函数解析

    torch.nn是包含了构筑神经网络结构基本元素的包,在这个包中,可以找到任意的神经网络层。这些神经网络层都是nn.Module这个大类的子类。torch.nn.Linear就是神经网络中的线性层,可以实现形如y=Xweight^T+b的加和功能。 nn.Linear():用于设置网络中的全连接层,需要注意的是全连接

    2024年02月16日
    浏览(40)
  • 协方差矩阵在torch和numpy中的比较,自行实现torch协方差矩阵

    数学中(教科书、大学课堂、数学相关的科普视频),一个矩阵的向量往往是竖着的, 一列作为一个vector ,这一点numpy库也是这样默认的。 但是在机器学习以torch框架为例,一个有意义的向量或者说embedding 是横着的 。 因为numpy库默认是一列是一个向量而torch等机器学习框架

    2023年04月08日
    浏览(38)
  • 线性代数矩阵乘法中的行向量和列向量

    在矩阵中有两个概念,行向量与列向量,这是从两个不同的角度看待矩阵的组成。这篇文章将从 行向量 和 列向量 两个角度来分解 矩阵的乘法 。 假设有两个矩阵 A 和 B 一般矩阵的乘法分解 简单的理解就是A矩阵的第一行与B矩阵的第一列逐元素相乘,就是 结果矩阵 的左上角

    2024年02月11日
    浏览(47)
  • 详解Pytorch中的torch.nn.MSELoss函,包括对每个参数的分析!

    一、函数介绍 Pytorch中MSELoss函数的接口声明如下,具体网址可以点这里。 torch.nn.MSELoss(size_average=None, reduce=None, reduction=‘mean’) 该函数 默认用于计算两个输入对应元素差值平方和的均值 。具体地,在深度学习中,可以使用该函数用来计算两个特征图的相似性。 二、使用方式

    2023年04月19日
    浏览(46)
  • 【数据结构】数组和字符串(十):稀疏矩阵的链接存储:十字链表的矩阵操作(加法、乘法、转置)

    【数据结构】数组和字符串(一):矩阵的数组表示   矩阵是以按行优先次序将所有矩阵元素存放在一个一维数组中。但是对于特殊矩阵,如对称矩阵、三角矩阵、对角矩阵和稀疏矩阵等, 如果用这种方式存储,会出现大量存储空间存放重复信息或零元素的情况,这样会造

    2024年02月08日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包