2015-12-10 2 views
25

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

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

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

w1 
... 
wN 

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

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

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

ответ

30

Самый простой код, чтобы сделать это зависит от поведения вещания tf.multiply()*, который основан на numpy's broadcasting behavior:

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) для выполнения той же операции.

+5

Ссылка на документацию мертва. Это фактическое: [tf.multiply] (https://www.tensorflow.org/api_docs/python/tf/multiply) – Pantoofle

+0

Спасибо ... ссылка должна быть исправлена ​​прямо сейчас! – mrry