张量流中具有张量乘法的向量的 matmul 函数
matmul function for vector with tensor multiplication in tensorflow
一般来说,当我们将维度 1*n
的向量 v
与维度 m*n*k
的张量 T
相乘时,我们期望得到 matrix/tensor维度 m*k
/m*1*k
。这意味着我们的张量有 m
个维度为 n*k
的矩阵切片,并且 v
与每个矩阵相乘,并将生成的向量堆叠在一起。为了在 tensorflow
中进行这种乘法运算,我提出了以下公式。我只是想知道是否有任何内置函数可以直接执行此标准乘法?
T = tf.Variable(tf.random_normal((m,n,k)), name="tensor")
v = tf.Variable(tf.random_normal((1,n)), name="vector")
c = tf.stack([v,v]) # m times, here set m=2
output = tf.matmul(c,T)
您可以使用:
tf.reduce_sum(tf.expand_dims(v,2)*T,1)
代码:
m, n, k = 2, 3, 4
T = tf.Variable(tf.random_normal((m,n,k)), name="tensor")
v = tf.Variable(tf.random_normal((1,n)), name="vector")
c = tf.stack([v,v]) # m times, here set m=2
out1 = tf.matmul(c,T)
out2 = tf.reduce_sum(tf.expand_dims(v,2)*T,1)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
n_out1 = sess.run(out1)
n_out2 = sess.run(out2)
#both n_out1 and n_out2 matches
不确定是否有更好的方法,但听起来您可以像这样使用 tf.map_fn
:
output = tf.map_fn(lambda x: tf.matmul(v, x), T)
一般来说,当我们将维度 1*n
的向量 v
与维度 m*n*k
的张量 T
相乘时,我们期望得到 matrix/tensor维度 m*k
/m*1*k
。这意味着我们的张量有 m
个维度为 n*k
的矩阵切片,并且 v
与每个矩阵相乘,并将生成的向量堆叠在一起。为了在 tensorflow
中进行这种乘法运算,我提出了以下公式。我只是想知道是否有任何内置函数可以直接执行此标准乘法?
T = tf.Variable(tf.random_normal((m,n,k)), name="tensor")
v = tf.Variable(tf.random_normal((1,n)), name="vector")
c = tf.stack([v,v]) # m times, here set m=2
output = tf.matmul(c,T)
您可以使用:
tf.reduce_sum(tf.expand_dims(v,2)*T,1)
代码:
m, n, k = 2, 3, 4
T = tf.Variable(tf.random_normal((m,n,k)), name="tensor")
v = tf.Variable(tf.random_normal((1,n)), name="vector")
c = tf.stack([v,v]) # m times, here set m=2
out1 = tf.matmul(c,T)
out2 = tf.reduce_sum(tf.expand_dims(v,2)*T,1)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
n_out1 = sess.run(out1)
n_out2 = sess.run(out2)
#both n_out1 and n_out2 matches
不确定是否有更好的方法,但听起来您可以像这样使用 tf.map_fn
:
output = tf.map_fn(lambda x: tf.matmul(v, x), T)