是否可以仅将张量中的一个(最后)维与其他向量相乘?
例如,假设张量T = [100,20,400],矩阵M = [400,400]。
是否可以进行h_{transpose}*M*h
操作,其中h
是张量T中的最后一个维?换句话说,是否有可能利用(可能是pytorch)内置函数来获得大小为[100,20,1]的结果张量?
答案 0 :(得分:1)
我认为最简单(当然是最短)的解决方案是使用einsum
。
import torch
T = torch.randn(100, 20, 400)
M = torch.randn(400, 400)
res = torch.einsum('abc,cd,abd->ab', (T, M, T)).unsqueeze(-1)
它基本上说:“对于所有(a, b, c, d)
,将T[a, b, c]
乘以M[c, d]
和T[a, b, d]
,然后将其累加到res[a, b]
中。”
由于einsum
是根据mm
,transpose
等基本构建块实现的,因此可以肯定地将其展开为更“经典”的解决方案,但是现在我的大脑无法正常工作我就是那个。