在Tensorflow中,假设我有两个矩阵M
和N
,我怎样才能得到一个张量,其(i, j)
元素是第i行的元素乘积{ {1}}和第M
行?
答案 0 :(得分:2)
这里有一个技巧:将两个矩阵扩展到3D并进行elert-wise multiply(a.k.a.Hadamard产品)。
.transparent-bg2 {
background-color:rgba(0, 0, 0, 0.4);
position:absolute;
visibility:visible;
opacity:1;
transition:opacity 0.5s linear;
width:calc(100% - 30px); /* subtract parent element padding from width */
height:100%;
z-index:2;
}
让我们检查它是否有效:
# Let `a` and `b` be the rank 2 tensors, with the same 2nd dimension
lhs = tf.expand_dims(a, axis=1)
rhs = tf.expand_dims(b, axis=0)
products = lhs * rhs
同样的技巧实际上也适用于numpy以及任何基于元素的二元运算(sum,product,division,...)。这是一个逐行元素和张量的例子:
tf.InteractiveSession()
# 2 x 3
a = tf.constant([
[1, 2, 3],
[3, 2, 1],
])
# 3 x 3
b = tf.constant([
[2, 1, 1],
[2, 2, 0],
[1, 2, 1],
])
lhs = tf.expand_dims(a, axis=1)
rhs = tf.expand_dims(b, axis=0)
products = lhs * rhs
print(products.eval())
# [[[2 2 3]
# [2 4 0]
# [1 4 3]]
#
# [[6 2 1]
# [6 4 0]
# [3 4 1]]]