【发布时间】:2019-02-23 17:19:25
【问题描述】:
如果我有两个张量 - A 形状为 [4,3,3] 和 B 形状为 [2,3,3]。对于 A 中的每个 [3,3] 矩阵,我想与 B 中的每个 [3,3] 矩阵相乘以生成形状为 [4,2,3,3] 的张量 C .
如何在 Tensorflow 中做到这一点?
【问题讨论】:
标签: python tensorflow
如果我有两个张量 - A 形状为 [4,3,3] 和 B 形状为 [2,3,3]。对于 A 中的每个 [3,3] 矩阵,我想与 B 中的每个 [3,3] 矩阵相乘以生成形状为 [4,2,3,3] 的张量 C .
如何在 Tensorflow 中做到这一点?
【问题讨论】:
标签: python tensorflow
你可以使用tf.einsum('ikl,jkl->ijkl', A, B):
例子:
A = tf.reshape(tf.range(36), [4,3,3])
B = tf.reshape(tf.range(18), [2,3,3])
tf.einsum('ikl,jkl->ijkl', A, B)
# <tf.Tensor 'einsum/transpose_2:0' shape=(4, 2, 3, 3) dtype=int32>
【讨论】:
Areshape成(4,1,3,3),然后加上A和B。tf.reshape(A, [4,1,3,3]) + B,它使用广播属性来做到这一点。
您可以为此操作取消堆叠它们:
A = tf.reshape(tf.range(36), [4,3,3])
B = tf.reshape(tf.range(18), [2,3,3])
AB=[tf.matmul(i,j) for i in tf.unstack(A,int(A.shape[0]),0) for j in tf.unstack(B,int(B.shape[0]),0)]
AB=tf.reshape(tf.stack(output,0),[4,2,3,3])
【讨论】: