2016-11-21 8 views
0

У меня есть 1D-список python, называемый x, формы (1000), который содержит тензорные элементы формы (3, 600). У меня также есть переменная тензорного потока w формы (600, 1), которую я хотел бы умножить на каждый тензорный элемент x. Результатом каждой операции будет тензор формы (3, 1).Умножение тензоров в списке python с постоянной переменной в тензорном потоке

Есть ли способ эффективного применения w к каждому элементу x? Логика использования цикла питона будет:

for i in range(1000): 
    x[i] = tf.matmul(x[i], w) 

Я уже пробовал следующее:

w = [w] * 1000 
result = tf.mul(x, w) 

Но я получил следующее сообщение об ошибке:

ValueError: Dimensions must be equal, but are 3 and 600 for 'Mul' (op: 'Mul') with input shapes: [1000,3,600], [1000,600,1] 

Спасибо!

ответ

0

Посмотрите на использование tf.map_fn, который отображает функцию вдоль первой оси тензора. В этом случае x - тензор формы (1000, 3, 600). Не имеет значения, что первый тусклый список. Он будет действовать как тензор.

tf.map_fn(lambda x_: tf.matmul(x_, W), x)

Можно также использовать операцию tf.batch_matmul следующим образом.

tf.batch_matmul(x, [w] * 1000)

Однако я хотел бы использовать tf.tile вместо [ш] * 1000

+0

Спасибо, оба работали! Однако 'tf.batch_matmul' выглядел быстрее. – Pierre

+0

Да. По какой-то причине, хотя я не думаю, что это трансляция. Вид раздражает, что вы должны плитку первого тусклого. – chasep255

 Смежные вопросы

  • Нет связанных вопросов^_^