TensorFlow 中矩阵和向量的高效逐元素乘法

Posted

技术标签:

【中文标题】TensorFlow 中矩阵和向量的高效逐元素乘法【英文标题】:Efficient element-wise multiplication of a matrix and a vector in TensorFlow 【发布时间】:2016-03-15 12:26:16 【问题描述】:

乘以(逐元素)二维张量(矩阵)的最有效方法是什么:

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

通过垂直向量:

w1
...
wN

获取新矩阵:

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

为了提供一些背景信息,我们有一批可以并行处理的 M 数据样本,并且每个 N-元素样本必须乘以存储在变量中的权重 w 以最终选择最大的Xij*wj 对应每一行 i

【问题讨论】:

【参考方案1】:

执行此操作的最简单代码依赖于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)来执行相同的操作。

【讨论】:

文档链接已失效。这是实际的:tf.multiply 谢谢...现在应该修复链接! 不要忘记括号:print(sess.run(xw)) 和 print(sess.run(max_in_rows)) 我将它应用于密集矩阵和稀疏向量,但不起作用。

以上是关于TensorFlow 中矩阵和向量的高效逐元素乘法的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV逐元素矩阵乘法

稀疏矩阵与密集矩阵乘法 C++ Tensorflow

Apple Metal元素矩阵乘法(Hadamard产品)

DolphinDB 中矩阵和向量的元素乘法

逐元素矩阵乘法:R 与 Rcpp(如何加快此代码的速度?)

Scala Breeze的*和*:*在矩阵和向量中的用法