1维张量内积-torch.dot()

内积返回的是一个值,如果都归一化了,可以看做相似度。

torch.dot(input, tensor) → Tensor
#计算两个张量的点积(内积)
#官方提示:不能进行广播(broadcast).
#example
>>> torch.dot(torch.tensor([2, 3]), torch.tensor([2, 1])) #即对应位置相乘再相加
tensor(7)
>>> torch.dot(torch.rand(2, 3), torch.rand(2, 2))
#报错,只允许一维的tensor
RuntimeError: 1D tensors expected, got 2D, 2D tensors at /Users/distiller/project/conda/conda-bld/pytorch_1570710797334/work/aten/src/TH/generic/THTensorEvenMoreMath.cpp:774

注意 新版本中(>=0.3.0),关于 tensor.dot() 有了新的改变,它只能针对于一维的数组.。

2 矩阵乘法-torch.mm()

满足矩阵乘法的shape变化:(a, b)* ( b, c ) = ( a, c )

torch.mm(input, mat2, out=None) → Tensor
#对矩阵imput和mat2执行矩阵乘法。 如果input为(n x m)张量,则mat2为(m x p)张量,out将为(n x p)张量。
#官方提示此功能不广播。有关广播的矩阵乘法,请参见torch.matmul()。
#example
>>> mat1 = torch.randn(2, 3)
>>> mat2 = torch.randn(3, 3)
>>> torch.mm(mat1, mat2)
tensor([[ 0.4851,  0.5037, -0.3633],[-0.0760, -3.6705,  2.4784]])

3 矩阵点乘

即对应的位相乘,要求shape一样, 返回的还是个矩阵。

torch.mul(tc.ones((3,4)), 5*tc.ones(3,4))

Out[14]:
tensor([[5., 5., 5., 5.],
[5., 5., 5., 5.],
[5., 5., 5., 5.]])

3 综合乘法-torch.matmul()

如果是1维的,维度一样,跟dot结果是一样的:

    aaa = torch.tensor([2, 3])bbb = torch.tensor([2, 1])simillar_v = torch.matmul(aaa, bbb)dot_v = torch.dot(aaa, bbb)print('simillar_v', simillar_v)print('dot_v', dot_v)

这种方法一定要看清楚了再用~
注意:标量是0维的~,即 size 的结果是 torch.Size([])

torch.matmul(input, other, out=None) → Tensor
#两个张量的矩阵乘积。行为取决于张量的维数,如下所示:
#1. 如果两个张量都是一维的,则返回点积(标量)。
>>> # vector x vector
>>> tensor1 = torch.randn(3)
>>> tensor2 = torch.randn(3)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([])
#2. 如果两个参数都是二维的,则返回矩阵矩阵乘积。
# matrix x matrix
>>> tensor1 = torch.randn(3, 4)
>>> tensor2 = torch.randn(4, 5)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([3, 5])
#3. 如果第一个参数是一维的,而第二个参数是二维的,则为了矩阵乘法,会将1附加到其维数上。矩阵相乘后,将删除前置尺寸。
# 也就是让tensor2变成矩阵表示,1x3的矩阵和 3x4的矩阵,得到1x4的矩阵,然后删除1
>>> tensor1 = torch.randn(3, 4)
>>> tensor2 = torch.randn(3)
>>> torch.matmul(tensor2, tensor1).size()
torch.Size([4])
#4. 如果第一个参数为二维,第二个参数为一维,则返回矩阵向量乘积。
# matrix x vector
>>> tensor1 = torch.randn(3, 4)
>>> tensor2 = torch.randn(4)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([3])
#5. 如果两个自变量至少为一维且至少一个自变量为N维(其中N> 2),则返回批处理矩阵乘法。如果第一个参数是一维的,则在其维数之前添加一个1,以实现批量矩阵乘法并在其后删除。如果第二个参数为一维,则将1附加到其维上,以实现成批矩阵倍数的目的,然后将其删除。非矩阵(即批量)维度可以被广播(因此必须是可广播的)。例如,如果input为(jx1xnxm)张量,而other为(k×m×p)张量,out将是(j×k×n×p)张量。
>>> # 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])
>>> tensor1 = torch.randn(10, 1, 3, 4)
>>> tensor2 = torch.randn(2, 4, 5)
>>> torch.matmul(tensor1, tensor2).size()
torch.Size([10, 2, 3, 5])

pytorch 内积 矩阵乘法相关推荐

  1. Pytorch:矩阵乘法总结

    1.矩阵相乘 (1)二维矩阵乘法:torch.mm(mat1, mat2, out=None) → Tensor 该函数一般只用来计算两个二维矩阵的矩阵乘法,并且不支持broadcast操作. 代码例 ...

  2. inner_product函数实现向量内积矩阵乘法

    头文件:#include<numeric> 函数定义:std::inner_product(begin1,end1,begin2,init) 功能说明:计算两个vector的内积,这个函数 ...

  3. [PyTorch] 矩阵乘法

    参考 『PyTorch』矩阵乘法总结 1. * 两个张量在对应的位置上进行数值相乘. x = torch.randn(2, 2) y = x * x 2. torch.mm() 二维矩阵乘法 x = ...

  4. pytorch矩阵乘法mm,bmm

    文章目录 矩阵维度 矩阵乘法 torch.mm torch.bmm torch.matmul 矩阵维度 首先需要确认多维矩阵每个维度的对应含义. a = torch.tensor([[[3.], [1 ...

  5. pytorch矩阵乘法总结

    文章目录 点乘 `torch.mul(a,b)` 二维矩阵乘 `torch.mm(a,b)` 三维矩阵乘 `torch.bmm(`a,b) 高维矩阵乘 `torch.matmul(a,b)` 点乘 t ...

  6. 乘法/积运算和符号(点乘/内积/数量积,叉乘/向量积,矩阵乘法,Hadamard, Kronecker积,卷积)一网打尽

    之前一直混淆于各种乘法和积运算中,不得其解,所以花了点功夫整理一下. 名称 符号 Latex 运算 应用 意义 点乘/内积/数量积 ⋅\cdot⋅或∙\bullet∙ \cdot或\bullet a⃗ ...

  7. 点乘/内积/数量积;叉乘/向量积;矩阵乘法;哈达马积;克罗内克积;卷积

    # 1. 符号解释 | 名称 |  符号 | Latex | 运算     |  应用 | 意义 | |--|--|--|--|--|--| | 点乘/内积/数量积 | $⋅$ 或 $\bullet$ ...

  8. Pytorch矩阵乘法之torch.mul() 、 torch.mm() 及torch.matmul()的区别

    torch.mul() . torch.mm() 及torch.matmul()的区别 一.简介 torch.mul(a, b) 是矩阵a和b对应位相乘,a和b的维度必须相等,比如a的维度是(1, 2 ...

  9. 矩阵乘法的几种观点,内积外积的理解

    reference 矩阵乘法核心思想(5):内积与外积 uuu和vvv分别是m×1m \times 1m×1 的向量,uTvu^TvuTv 是内积(1×11 \times11×1也就是内积得到一个数) ...

最新文章

  1. PyTorch迁移学习
  2. [POJ 1222] EXTENDED LIGHTS OUT
  3. [蓝桥杯][2017年第八届真题]合根植物
  4. 策略模式Strategy——坐什么车回家?
  5. Magnet :让Mac上的分屏更好用
  6. ASP.NET MVC 在项目中使用面包屑导航
  7. Java WebService使用简单教程
  8. 网页设计html流水效果图,15例简单常用网页设计效果代码
  9. 《信条》中国内地IMAX首周末票房表现强劲;洲际集团将在川滇环线新开四家酒店 | 美通企业日报...
  10. Java ques: Unknown initial character set index ‘255‘ received from server. Initial client character
  11. 苹果计算机恢复计算器,苹果自带计算器删除怎么恢復
  12. 今日头条前端面试总结
  13. ubuntu下vscode配置C++项目编译调试(json文件),以高翔octomap教程为例,顺便解决vscode无法设置断点问题.
  14. OpenCV:03图像的算数运算
  15. 点击复制以及长按识别图中二维码功能
  16. 通过winform+模拟登录实现快速一键登录到人才招聘网站
  17. c语言中int 3.6 =,(C语言中的常量)乐创DIY C语言讲义​——3.6节
  18. 把英文翻译成中文php,中文翻译成英文,英文翻译成中文(调用的有道翻译的api)示例源码...
  19. 【洛谷P4997】不围棋【并查集】【模拟】
  20. python自动发微信新闻_微信群总有人发广告?用Python写一个自动化机器人消灭他...

热门文章

  1. sudo: /etc/sudoers is world writable 错误解决方案
  2. 一句话总结Windbg 32位版本和64位版本的选择
  3. Java基于Socket文件传输示例
  4. c语言读取一个图像文件格式,求指导,如何用c语言实现读取*.raw格式图像
  5. 极光 php 自定义消息,laravel框架使用极光推送消息操作示例
  6. Design Pattern - Builder(C#)
  7. arcgis 散瓦片发布服务_利用已有的缓存地图文件发布ArcGIS Server瓦片服务
  8. 优贝共享数据交易所网_2020.9.9号币圈简报:水天共享数据迁移,链淘公告明天开始减产...
  9. linux线程堆分配,如何在Linux中的相同进程下为线程分配堆栈或内存
  10. linux sa 命令,Linux 常用命令全拼