einsum 方程的澄清

问题描述 投票:0回答:1

我在 Huggingface 上发现了一些使用

torch.einsum
的代码(在自我注意模块中),我对此不太熟悉,希望得到一些帮助解释。我已经浏览了这个基本操作列表及其在 NumPy/PyTorch 中的实现。输入是 4D 张量和 3D 张量。

这是(显式)einsum 字符串:

'bhld,lrd->bhlr'

(使用的另一个 einsum 字符串类似:

'bhrd,lrd->bhlr')

这是什么意思/在不使用 einsum 的情况下如何实现?例如,必须转置第二个张量,使 d 成为第一个维度。

numpy pytorch huggingface-transformers tensor numpy-einsum
1个回答
0
投票
'bhld,lrd->bhlr'

第 arg 是 4d,第二个是 3d,结果 4d

'bh' 不变地通过。 ‘r’也。 'ld' 维度通过乘法和乘积之和进行匹配 'd'。

它是乘积的广播总和,我认为等效的是(未经测试)

(A[:,:,:,None,:] * B[None, None, :,:,:]).sum(axis=-1)

“d”、“r”的总和在所有 3 个中共享

'bhrd,lrd->bhlr'
© www.soinside.com 2019 - 2024. All rights reserved.