假设我有一个t1
大小的张量(a, b, c)
和另一个t2
大小的张量(c, d)
。有没有一种方法可以将它们相乘并获得t3
(不是(a, d, b)
)大小的(a, b, d)
(而不是tf.transpose
操作)?
工作示例:
import tensorflow as tf # version 2.1.0
t1 = tf.constant(tf.reshape(range(24), (2, 3, 4)))
t2 = tf.constant(tf.reshape(range(20), (4, 5)))
t3 = tf.transpose(tf.tensordot(t1, t2, axes=[[2], [0]]), [0, 2, 1]) # shape = (2, 5, 3)
我想要的是从t3
和t1
中获得t2
,而无需使用tf.transpose
,这据说很昂贵(link 1,link 2 )。
我正在将Tensorflow 2.1.0与Python 3.7一起使用。
答案 0 :(得分:1)
import tensorflow as tf
t1 = tf.constant(tf.reshape(range(24), (2, 3, 4)))
t2 = tf.constant(tf.reshape(range(20), (4, 5)))
t3 = tf.linalg.matmul(t2, t1, transpose_a=True, transpose_b=True)
这是执行矩阵乘法的有效方法,而无需实际计算和存储转置。