2017-01-11 4 views
1

Мы знаем, что tf.multiply может передать так:Tensorflow умножение вещает в партиях

import tensorflow as tf 
import numpy as np 
a = tf.Variable(np.arange(12).reshape(3, 4)) 
b = tf.Variable(np.arange(4)) 
sess = tf.InteractiveSession() 
sess.run(tf.global_variables_initializer()) 
sess.run(tf.multiply(a, b)) 

Это даст нам

[[0, 1, 4, 9], 
[0, 5, 12, 21], 
[0, 9, 20, 33]] 

Но мой вопрос, что я должен делать, если оба a и b в пакетах? То есть,

a = tf.Variable(np.arange(24).reshape(2, 3, 4)) 
b = tf.Variable(np.arange(8).reshape(2, 4)) 

Тогда как я могу получить результат умножения (вещания) вектора на матрицу в каждой партии? Ответьте следующим образом:

[[[0, 1, 4, 9], 
    [0, 5, 12, 21], 
    [0, 9, 20, 33]], 

[[48, 65, 84, 105], 
    [64, 85, 108, 133], 
    [80, 105, 132, 161]]] 

Спасибо!

ответ

1

Вещание сначала добавляет размеры синглтона влево до достижения ранга. В первом случае это добавляет размер партии. Но во втором случае у вас уже есть размер партии, поэтому вам необходимо вручную вставить размер одноэлементного кода во вторую позицию:

a = tf.reshape(tf.range(24), (2, 3, 4)) 
b = tf.reshape(tf.range(8), (2, 4)) 
sess.run(tf.mul(a, tf.expand_dims(b, 1))) 
Смежные вопросы