Точечное произведение между постоянным вектором и переменной с размером пакета в Tensorflow

#tensorflow #keras #vector #tensorflow2.0

#tensorflow #keras #вектор #tensorflow2.0

Вопрос:

В tensorflow у меня есть:

  1. Константа из 2000 векторов размером 1500. (dim = (2000, 1500)) с именем X
  2. Переменная пакетного ввода из 75 векторов размером 1500 (dim = (?, 75, 1500)) с именем y

Я хочу, чтобы скалярное произведение каждого вектора X между каждым вектором y приводило к вектору размерности (?, 75, 2000)

Есть ли способ, которым я могу это сделать, используя dot или batch_dot?

Ответ №1:

ДА.

Используйте tf.matmul(). Он будет работать с неизвестным пакетом.

 
import tensorflow as tf


# random X
X = tf.random.normal([2000, 1500])

print(X.shape)
# (2000, 1500)

# variable-batch y
y = tf.keras.Input([75, 1500])

print(y.shape)
# (None, 75, 1500)

# dot-product
out = tf.matmul(y, X, transpose_b=True)

print(out.shape)
# (None, 75, 2000)