指定尺寸的张量积,不进行转置

时间:2020-04-30 05:04:34

标签: python tensorflow reshape transpose tensor

假设我有一个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)

我想要的是从t3t1中获得t2,而无需使用tf.transpose,这据说很昂贵(link 1link 2 )。

我正在将Tensorflow 2.1.0与Python 3.7一起使用。

1 个答案:

答案 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)

这是执行矩阵乘法的有效方法,而无需实际计算和存储转置。

相关问题