python中mul函数 python中multi函数( 三 )


当进行操作的两个tensor都是3D时,两者等同 。
torch.bmm()

torch.bmm(input, mat2, out=None) → Tensor
torch.bmm()是tensor中的一个相乘操作,类似于矩阵中的A*B 。
参数:
input,mat2:两个要进行相乘的tensor结构,两者必须是3D维度的,每个维度中的大小是相同的 。
output:输出结果
并且相乘的两个矩阵,要满足一定的维度要求:input(p,m,n) * mat2(p,n,a) -output(p,m,a) 。这个要求,可以类比于矩阵相乘 。前一个矩阵的列等于后面矩阵的行才可以相乘 。
例子:
torch.matmul()也是一种类似于矩阵相乘操作的tensor联乘操作 。但是它可以利用python 中的广播机制,处理一些维度不同的tensor结构进行相乘操作 。这也是该函数与torch.bmm()区别所在 。
参数:
input,other:两个要进行操作的tensor结构
output:结果
一些规则约定:
(1)若两个都是1D(向量)的,则返回两个向量的点积
(2)若两个都是2D(矩阵)的,则按照(矩阵相乘)规则返回2D
(3)若input维度1D,other维度2D , 则先将1D的维度扩充到2D(1D的维数前面+1),然后得到结果后再将此维度去掉,得到的与input的维度相同 。即使作扩充(广播)处理,input的维度也要和other维度做对应关系 。
(4)若input是2D,other是1D,则返回两者的点积结果 。(个人觉得这块也可以理解成给other添加了维度,然后再去掉此维度 , 只不过维度是(3, )而不是规则(3)中的( ,4)了,但是可能就是因为内部机制不同,所以官方说的是点积而不是维度的升高和下降)
(5)如果一个维度至少是1D,另外一个大于2D,则返回的是一个批矩阵乘法( a batched matrix multiply) 。
(a)若input是1D,other是大于2D的,则类似于规则(3) 。
(b)若other是1D,input是大于2D的,则类似于规则(4) 。
(c)若input和other都是3D的,则与torch.bmm()函数功能一样 。
(d)如果input中某一维度满足可以广播(扩充),那么也是可以进行相乘操作的 。例如 input(j,1,n,m)*other (k,m,p)= output(j,k,n,p) 。
这个例子中,可以理解为x中dim=1这个维度可以扩充(广播),y中可以添加一个维度,然后在进行批乘操作 。
关于python中mul函数和python中multi函数的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读