一个关于tensorflow中多维矩阵乘积的问题
Posted
技术标签:
【中文标题】一个关于tensorflow中多维矩阵乘积的问题【英文标题】:A question about matrix product with multiple dimensions in tensorflow 【发布时间】:2022-01-17 23:29:54 【问题描述】:研究一篇论文相关的代码,我试图理解以下内容:
让我们考虑一个名为x
的tf.tensor
形状为(4, 64, 5, 5, 5)
和以下数组:
p
array([[[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]],
[[0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.]],
[[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.]],
[[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.]],
[[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.],
[1., 0., 0., 0., 0.]]], dtype=float32)
形状为(5,5,5)
。
现在计算运算 x @ p
是什么意思?这是x
和p
之间的矩阵乘积吗?如果是,我应该如何解释它具有多个维度?
【问题讨论】:
来自the docs,如果任一参数为 N-D,N > 2,则将其视为驻留在最后两个索引中的矩阵堆栈并相应地广播。所以你的x
是4 x 64 x 5
矩阵,你的p
是1 x 1 x 5
矩阵,每个都是5 x 5
矩阵。
'每个都是 5x5 矩阵',但我不明白那是哪些元素?所以 x 将是一个形状为 4x64x5 的 5x5 矩阵?我不明白对不起
没有x
有4 x 64 x 5
矩阵,每个都是5 x 5
,同样p
是1 x 1 x 5 = 5
矩阵。 x @ p
就像 x[i,j,k] @ p[k]
。
【参考方案1】:
TensorFlow dcumentation 表示运算符@
只是调用方法tf.matmul
,所以它只是矩阵乘法。对于普通矩阵,使用索引表示法,这只是(我将使用 Latex 表示法):
$$
\sum_b A_ab B_bd = C_ad
$$
对于大于2的范围,该操作描述如下:
$$
\sum_i A_abc...ni B_abc...im = C_abc...nm
$$
所以在你的例子中,我们有x.shape = (4, 64, 5, 5, 5)
和p.shape = (5, 5, 5)
,这意味着结果是一个形状为(4, 64, 5, 5, 5)
的张量。它执行4 x 64 x 5 = 5120
形式的(5,5)@(5,5)
矩阵乘法。
更准确地说,如果我调用A = x@p
,您可以检查A[i, j, k]
的值是否等于x[i, j, k] @ p[k]
。
【讨论】:
以上是关于一个关于tensorflow中多维矩阵乘积的问题的主要内容,如果未能解决你的问题,请参考以下文章