在使用Numpy或者TensorFlow的tensordot方法进行矩阵相乘的时候,axes是一个重要的参数,它可以定义两个矩阵互乘的时候是使用内积、外积、或是其他方法。不管Numpy还是TensorFlow,它们使用tensordot的axes参数的方法是一样的,本文在举例时混用了这两个函数,千万不要被迷惑。
以TensorFlow的tensordot为例,其语法为:
tf.tensordot(
a, b, axes, name=None
)
其中a和b为输入的两个矩阵,参数axes定义了两个矩阵如何相乘。
如设置“axes=0”的时候,就是计算a和b的外积(outer product)
设置“axes=1”的时候,就是计算a和b的内积(dot product)
在二维以下的矩阵运算时,使用以上设置就足够了,但是在多维矩阵相乘的时候,axes参数该如何设置,具体如何运算呢?
首先我们来看TensorFlow官方文档里的一个例子(https://www.tensorflow.org/api_docs/python/tf/tensordot):
Example 4: Suppose that and
represent two tensors of order 3. Then,
contract(a, b, [[0], [2]])
is the order 4 tensor whose entry corresponding to the indices (j,k,l,m) is given by: