写过一篇,numpy中dot()、outer()、multiply()以及matmul()的区别,介绍了numpy中的点积、外积、转置、矩阵-向量乘法、矩阵-矩阵乘法等计算方法。
在Pytorch中这些矩阵运算是很常见的,几乎存在于每个模型中。那么在Pytorch中如何实现的呢?同时面对这么多不同的计算方法,有没有一种统一的方法呢?接下来就详细介绍
一、概述
点乘(内积) : torch.dot
计算两个张量的点乘(内乘),两个张量都为1-D 向量。
矩阵乘法: torch.mm与torch.bmm
前者实现矩阵乘法,后者实现批量矩阵乘法。
集大成者: torch.einsum
爱因斯坦求和约定(einsum)这个方法可以实现绝大多数的矩阵操作,包括点积、外积、转置、矩阵-向量乘法、矩阵-矩阵乘法。一旦理解并能利用einsum,除了不用记忆和频繁查找特定库函数这个好处以外,你还能够更迅速地编写更加紧凑、高效的代码。
二、点积: torch.dot
numpy中的np.dot可以实现很多矩阵运算,包括点积、外积、矩阵乘法等;torch.dot 只能实现张量的点积,张量都需要是一维向量。
>>> a = torch.arange(6)
>>> b = torch.arange(6)
>>> torch.dot(a,b)
tensor(55)
>>> torch.einsum('i,i->', [a, b])
tensor(55)
三、torch.mm 与 torch.bmm