python - sumar - Eficiente multiplicación por elementos de una matriz y un vector en TensorFlow
que es un array en python (1)
¿Cuál sería la forma más eficiente de multiplicar (elemento-sabio) un tensor 2D (matriz):
x11 x12 .. x1N
...
xM1 xM2 .. xMN
por un vector vertical:
w1
...
wN
para obtener una nueva matriz:
x11*w1 x12*w2 ... x1N*wN
...
xM1*w1 xM2*w2 ... xMN*wN
Para dar un contexto, tenemos M
muestras de datos en un lote que pueden procesarse en paralelo, y cada muestra de elementos N
debe multiplicar por pesos w
almacenados en una variable para finalmente elegir el Xij*wj
más grande para cada fila i
.
El código más simple para hacer esto se basa en el comportamiento de tf.multiply()
de tf.multiply()
* , que se basa en el comportamiento de difusión de 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]
* En versiones anteriores de TensorFlow, tf.multiply()
se llamaba tf.mul()
. También puede usar el operador *
(es decir, xw = x * w
) para realizar la misma operación.