N-D 张量矩阵与张量流的乘法
N-D tensor matrix multiplication with tensorflow
假设我有一组向量 A
,我想将 A
中的每个向量与张量 T
相乘,最终得到一个张量 y
,其中每个切片矩阵都是 A
中的向量 v
与 T
:
相乘的结果
如果X
只包含一个向量,那么下面的代码有效(感谢中的回答):
tf.reduce_sum(tf.expand_dims(v,2)*T,1)
但是如果X
由几个向量组成,乘法的代码会怎样?
例如,我有以下 A
(带有 2
向量)和 T
的值:
A = tf.constant([1,2,3,4], shape=[2,2], dtype=tf.float32) #v1 =[1,2], v2=[3,4]
T = tf.constant([1,2,3,4,5,6,7,8], shape=[2,2,2], dtype=tf.float32)
我想通过将 A
乘以 T
得到以下输出:
[[[ 7. 10.]
[19. 22.]]
[[15. 22.]
[43. 50.]]]
这个问题的一个应用,是线性回归中的批量梯度下降 y = AX +b
,其中我有一组向量但不是训练权重矩阵X
,我想训练张量 T
,因此输出 y
将是一个张量,其中张量中的每个矩阵都是输入向量与 T
.
相乘的输出
请注意,一般来说,当我们将维度 1*n
的向量 v
与维度 m*n*k
的张量 T
相乘时,我们期望得到 matrix/tensor 维度 m*k/m*1*k
。这意味着我们的张量有 m
个维度为 n*k
的矩阵切片,v
与每个矩阵相乘,结果向量堆叠在一起。
尝试 tf.tensordot
:
tf.tensordot(A, T, axes=[-1, -2])
或者,
tf.squeeze(tf.tensordot(A[:, None], T, axes=[2, 1]))
eval
'这给出
array([[[ 7., 10.],
[19., 22.]],
[[15., 22.],
[43., 50.]]], dtype=float32)
假设我有一组向量 A
,我想将 A
中的每个向量与张量 T
相乘,最终得到一个张量 y
,其中每个切片矩阵都是 A
中的向量 v
与 T
:
如果X
只包含一个向量,那么下面的代码有效(感谢
tf.reduce_sum(tf.expand_dims(v,2)*T,1)
但是如果X
由几个向量组成,乘法的代码会怎样?
例如,我有以下 A
(带有 2
向量)和 T
的值:
A = tf.constant([1,2,3,4], shape=[2,2], dtype=tf.float32) #v1 =[1,2], v2=[3,4]
T = tf.constant([1,2,3,4,5,6,7,8], shape=[2,2,2], dtype=tf.float32)
我想通过将 A
乘以 T
得到以下输出:
[[[ 7. 10.]
[19. 22.]]
[[15. 22.]
[43. 50.]]]
这个问题的一个应用,是线性回归中的批量梯度下降 y = AX +b
,其中我有一组向量但不是训练权重矩阵X
,我想训练张量 T
,因此输出 y
将是一个张量,其中张量中的每个矩阵都是输入向量与 T
.
请注意,一般来说,当我们将维度 1*n
的向量 v
与维度 m*n*k
的张量 T
相乘时,我们期望得到 matrix/tensor 维度 m*k/m*1*k
。这意味着我们的张量有 m
个维度为 n*k
的矩阵切片,v
与每个矩阵相乘,结果向量堆叠在一起。
尝试 tf.tensordot
:
tf.tensordot(A, T, axes=[-1, -2])
或者,
tf.squeeze(tf.tensordot(A[:, None], T, axes=[2, 1]))
eval
'这给出
array([[[ 7., 10.],
[19., 22.]],
[[15., 22.],
[43., 50.]]], dtype=float32)