Tensorflow,如何将2D张量(矩阵)乘以1D向量中的对应元素

Cen*_*tAu 2 python numpy matrix-multiplication tensorflow tensor

我有一个2D矩阵M的形状[batch x dim],我有一个V形状的矢量[batch].如何将矩阵中的每个列乘以V中的相应元素?那是:

在此输入图像描述

我知道一个低效的numpy实现看起来像这样:

import numpy as np
M = np.random.uniform(size=(4, 10))
V = np.random.randint(4)
def tst(M, V):
  rows = []
  for i in range(len(M)):
    col = []
    for j in range(len(M[i])):
      col.append(M[i][j] * V[i])
    rows.append(col)
  return np.array(rows)
Run Code Online (Sandbox Code Playgroud)

在张量流中,给定两个张量,实现这一目标的最有效方法是什么?

import tensorflow as tf
sess = tf.InteractiveSession()
M = tf.constant(np.random.normal(size=(4,10)), dtype=tf.float32)
V = tf.constant([1,2,3,4], dtype=tf.float32)
Run Code Online (Sandbox Code Playgroud)

Div*_*kar 6

在NumPy中,我们需要制作V 2D然后让广播进行元素乘法(即Hadamard产品).我猜,它应该是相同的tensorflow.因此,为了扩展dims tensorflow,我们可以使用tf.newaxis(在较新的版本上)或者tf.expand_dims使用tf.reshape- 或重塑-

tf.multiply(M, V[:,tf.newaxis])
tf.multiply(M, tf.expand_dims(V,1))
tf.multiply(M, tf.reshape(V, (-1, 1)))
Run Code Online (Sandbox Code Playgroud)