Тензорное произведение заданного размера без транспонирования - PullRequest
1 голос
/ 30 апреля 2020

Предположим, у меня есть тензор 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, что предположительно дорого ( ссылка 1 , ссылка 2 ).

Я использую Tensorflow 2.1.0 с Python 3.7.

1 Ответ

1 голос
/ 30 апреля 2020
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)

Это эффективный способ выполнения умножения матриц без фактического вычисления и сохранения транспонирования.

...