Предположим, у меня есть набор векторов A
, и я хочу умножить каждый вектор в A
на тензор T
, чтобы в итоге получить тензор y
, в котором каждая матрица срезов является результатом умноженияvector v
in A
with T
:
Если X
состоит только из одного вектора, то работает следующий код (благодаря ответу в функции matmul для вектора с тензорным умножениемв тензорном потоке ):
tf.reduce_sum(tf.expand_dims(v,2)*T,1)
Но если X
состоит из нескольких векторов, каким будет код для умножения?
Например, у меня есть следующие значения для A
(с 2
векторами) и T
:
A = tf.constant([1,2,3,4], shape=[2,2], dtype=tf.float32) #v1 =[1,2], v2=[3,4]
T = tf.constant([1,2,3,4,5,6,7,8], shape=[2,2,2], dtype=tf.float32)
Я хочу получить следующий вывод, умножив A
на T
:
[[[ 7. 10.]
[19. 22.]]
[[15. 22.]
[43. 50.]]]
AnПриложением к этому вопросу является пакетный градиентный спуск в линейной регрессии y = AX +b
, в котором у меня есть набор векторов, но вместо тренировки весовой матрицы X
я хочу обучить тензор T
, поэтому вывод y
будет тензор, в котором EACМатрица h в тензоре - это результат умножения входного вектора на T
.
. Обратите внимание, что, как правило, при умножении вектора v
размерности 1*n
на тензор T
размерность m*n*k
, мы ожидаем получить матрицу / тензор размерности m*k/m*1*k
.Это означает, что наш тензор имеет m
срезов матриц с размерностью n*k
, и v
умножается на каждую матрицу, и результирующие векторы складываются вместе.