tensorflow中向量与矩阵相乘

         我们只当使用tensorflow的tf.matmul()可以进行矩阵间的运算,但是要求矩阵的每一个维度的长度都要大于2,假如我们进行向量与矩阵的乘法时,使用该函数,则会报错。

          具体地,我们使用一个2为的向量乘以一个2×2的矩阵:

import tensorflow as tf
a = tf.constant([2, 3])
b = tf.constant([[0, 1], [2, 3]])
c = tf.matmul(a, b)
with tf.Session() as sess:
     print(sess.run(c))
会报错:
ValueError: Shape must be rank 2 but is rank 1 for 'MatMul_11' (op: 'MatMul') with input shapes: [2], [2,2].

那如何实现向量与矩阵相乘呢?

         我们知道矩阵乘法的本质是对矩阵的向量进行线性组合,利用这个性质,我们可以对矩阵进行点乘再相加,从实现向量与矩阵的乘法。具体如下

1、矩阵×向量

 [[0, 1],      [2,
 [2, 3]]   ×    3] 

具体代码实现:

import tensorflow as tf
a = tf.constant([2, 3])
b = tf.constant([[0, 1], [2, 3]])
mul =tf.reduce_sum(tf.multiply(a, b), reduction_indices=1)
with tf.Session() as sess:
     print(sess.run(mul))
结果是:
[ 3 13]

2、向量×矩阵

   [2, 3]  ×  [[0, 1],      
              [2, 3]]     
这个时候需要将矩阵进行转置,然后在进行点乘,再横向相加
具体代码如下:

import tensorflow as tf
a = tf.constant([2, 3])
b = tf.constant([[0, 1], [2, 3]])
mul =tf.reduce_sum(tf.multiply(a, tf.transpose(b, perm=[1, 0])), reduction_indices=1)
with tf.Session() as sess:
     print(sess.run(mul))
结果:
[ 6 11]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章