张量积/乘法在 TensorFlow 中如何工作?

数据挖掘 张量流 线性代数
2021-09-21 04:17:19

在 Tensorflow 中,我看到了以下示例:

import tensorflow as tf 
import numpy as np 

mat_a = tf.constant(np.arange(1,13, dtype=np.int32), shape=[2,2,3])  
mat_b = tf.constant(np.arange(12,24, dtype=np.int32), shape=[2,3,2])  
mul_c = tf.matmul(mat_a, mat_b)

with tf.Session() as sess:  
   runop = sess.run(mul_c)  
   print(runop) 

[[[ 88  94]  
  [214 229]]  
 [[484 508]  
  [642 674]]]

张量乘法是如何工作的?

3个回答

您可能需要阅读文档

output[..., i, j] = sum_k (a[..., i, k] * b[..., k, j]), for all indices i, j.

例如,在您的示例中

  88=1×12+2×14+3×16,   94=1×13+2×15+3×17 214=4×12+5×14+6×16, 229=4×13+5×15+6×17

我给你举个小例子,如果你做下面的克罗内克产品

[1510][24]=[1[24]5[24]10[24]]=[2410202040]
Kronecker 乘积也适用于矩阵。

张量乘法只是矩阵乘法的推广,它只是向量乘法的推广。

矩阵乘法定义为:

AiBj=Ci,j

在哪里 i 是个 ith 排, j 是个 jth 列,和 是点积。因此它只是一系列的点产品。

然后可以看到这如何扩展到张量:

AiBj=Ci,j

在哪里 i 是个 ith 张量的逐行矩阵,和j 是个 jth 张量的按列矩阵......因此只是一系列矩阵乘法 - 或一系列点积。

假设所有张量都是三阶的(可以用三个坐标来描述):

AB=Ai,jBj,k=Ci,j,k

这意味着 (i,j)th 向量 A(j,k)th 向量 B.