每天五分钟,解决一个人工智能问题。
本节最重要的还是形状!
向量的内积也可以看成矩阵运算
向量本身只有一个维度,一根轴,如果你要把他看成是矩阵,就需要设定两根轴,也就是两个中括号。
设定矩阵x3,x4:
import numpy as np
x3 = np.array([[1,1]])
x4 = np.array([[1,0]])
x3.shape, x4.shape
输出:
((1, 2), (1, 2))
此时不能直接使用dot来进行运算,因为在numpy看来他已经是矩阵而不是向量。
你看以下操作,出错了吧!为什么出错?因为x3,x4是矩阵,矩阵是没有dot操作的。只有向量才有dot操作。
np.dot(x3, x4)
输出:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-78-0ce2f87b6910> in <module>
----> 1 np.dot(x3, x4)
ValueError: shapes (1,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
那我用矩阵相乘呢?使用matmul呢?
np.matmul(x3, x4)
输出:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-118-0f14e37b8b9a> in <module>
----> 1 np.matmul(x3, x4)
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 1 is different from 2)
为什么不可以?
对的,因为是矩阵相乘,所以一定要注意形状,此时我们只需要把其中的一个矩阵转置一下。见下图:
把x4转换前,转换后的情况分别输出:
print(x4)
print("x4 shape: ", x4.shape)
print(x4.transpose())
print("x4 transpose shape: ", x4.transpose().shape)
输出:
[[1 0]]
x4 shape: (1, 2)
[[1]
[0]]
x4 transpose shape: (2, 1)
好了,此时x3的形状1x2, x4的形状2x1,满足矩阵相乘的要求,来吧,乘一下!
np.matmul(x3, x4.transpose())
输出:
array([[1]])
总结:
1 本节又一次强调了矩阵的形状,在神经网络的训练过程中,每层的输入输出形状必须要对应上,再次强调!
2 矩阵是可以转置的,编程落地上可以使用numpy的transpose来实现。
目录:
人工智能必知必会-前言
人工智能必知必会-标量,向量,矩阵,张量
人工智能必知必会-向量的加减与缩放
人工智能必知必会-向量的内积
人工智能必知必会-向量之间的距离
人工智能必知必会-初识矩阵
人工智能必知必会-矩阵与向量
人工智能必知必会-矩阵的加减法
人工智能必知必会-矩阵乘法
人工智能必知必会-矩阵与方程组
人工智能必知必会-再看矩阵与向量
人工智能必知必会-矩阵与向量乘法的物理意义
人工智能必知必会-词向量(案例)
人工智能必知必会-矩阵相乘上
人工智能必知必会-矩阵相乘下