Подтвердить что ты не робот

Эффективное умножение матрицы на матрицу и вектор в TensorFlow

Каким будет наиболее эффективный способ умножить (по элементу) 2D-тензор (матрицу):

x11 x12 .. x1N
...
xM1 xM2 .. xMN

вертикальным вектором:

w1
...
wN

чтобы получить новую матрицу:

x11*w1 x12*w2 ... x1N*wN
...
xM1*w1 xM2*w2 ... xMN*wN

Чтобы дать некоторый контекст, мы имеем образцы данных M в пакете, которые могут обрабатываться параллельно, и каждый образец N -элемент должен быть умножен на весы w, хранящиеся в переменной, чтобы в конечном итоге выбрать самый большой Xij*wj для каждой строки i.

4b9b3361

Ответ 1

Простейший код для этого зависит от поведения вещания tf.multiply() * который основан на numpy-вещание:

x = tf.constant(5.0, shape=[5, 6])
w = tf.constant([0.0, 1.0, 2.0, 3.0, 4.0, 5.0])
xw = tf.multiply(x, w)
max_in_rows = tf.reduce_max(xw, 1)

sess = tf.Session()
print sess.run(xw)
# ==> [[0.0, 5.0, 10.0, 15.0, 20.0, 25.0],
#      [0.0, 5.0, 10.0, 15.0, 20.0, 25.0],
#      [0.0, 5.0, 10.0, 15.0, 20.0, 25.0],
#      [0.0, 5.0, 10.0, 15.0, 20.0, 25.0],
#      [0.0, 5.0, 10.0, 15.0, 20.0, 25.0]]

print sess.run(max_in_rows)
# ==> [25.0, 25.0, 25.0, 25.0, 25.0]

* В более старых версиях TensorFlow tf.multiply() был вызван tf.mul(). Вы также можете использовать оператор * (т.е. xw = x * w) для выполнения той же операции.