一个关于tensorflow中多维矩阵乘积的问题

Posted

技术标签:

【中文标题】一个关于tensorflow中多维矩阵乘积的问题【英文标题】:A question about matrix product with multiple dimensions in tensorflow 【发布时间】:2022-01-17 23:29:54 【问题描述】:

研究一篇论文相关的代码,我试图理解以下内容:

让我们考虑一个名为xtf.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 是什么意思?这是xp 之间的矩阵乘积吗?如果是,我应该如何解释它具有多个维度?

【问题讨论】:

来自the docs,如果任一参数为 N-D,N > 2,则将其视为驻留在最后两个索引中的矩阵堆栈并相应地广播。所以你的x4 x 64 x 5 矩阵,你的p1 x 1 x 5 矩阵,每个都是5 x 5 矩阵。 '每个都是 5x5 矩阵',但我不明白那是哪些元素?所以 x 将是一个形状为 4x64x5 的 5x5 矩阵?我不明白对不起 没有x4 x 64 x 5 矩阵,每个都是5 x 5,同样p1 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中多维矩阵乘积的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从两个数组中所有元素的乘积创建矩阵?

评估TensorFlow中多维输入之间的成对欧氏距离

Tensorflow(4) 张量属性:维数、形状、数据类型

张量t-product积基础 | 循环矩阵与向量乘积的离散傅立叶变换 · 循环矩阵的傅里叶对角化

深度学习框架机器学习的开源库TensorFlow

使用 C++ 在 OpenCV 中的矩阵中的多维数据