首页 文章

张量流中张量乘法向量的matmul函数

提问于
浏览
0

通常,当我们将维度 1*n 的向量 v 与维度 m*n*k 的张量 T 相乘时,我们期望获得维度 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)

2 回答

  • 0

    你可以这样做:

    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
    
  • 1

    不确定是否有更好的方法,但听起来你可以像这样使用 tf.map_fn

    output = tf.map_fn(lambda x: tf.matmul(v, x), T)
    

相关问题