Tensorflow快餐教程(4) - 矩阵
摘要: Tensorflow矩阵基础运算
矩阵
矩阵的初始化
矩阵因为元素更多,所以初始化函数更多了。光靠tf.linspace,tf.range之类的线性生成函数已经不够用了。
可以通过先生成一个线性序列,然后再reshape成一个矩阵的方式来初始化。
例:
tf.linspace生成了(16,)的一个向量,然后被reshape成(4,4)的矩阵。
生成全0值的矩阵
tf.zeros可以生成全0的矩阵,不指定类型时,默认为float32.
可以指定数据类型:
生成全1的矩阵
类似地,我们可以用tf.ones生成值全为1的矩阵。
例:
将矩阵全部设成一个值
tf.ones和tf.zeros其实是特例,tf.fill才是更通用的功能:
生成对角矩阵
矩阵一个特点是经常是只有稀疏的值。最常用的就是对角阵,只有一条对角线上有值。
例:
除了生成对角阵,我们还可以从一个矩阵中将对角线值获取成一个向量:
随机生成初始化值
除了全0,全1,全确定值和对角线值,还有一种非常常用的方式就是生成随机值。
我们可以按正态分布来生成初始值:
可以指定平均值和标准差,默认均值为0,标准差为1。默认的类型为float32,反正不支持整数。
例:
矩阵的转置
将矩阵中的元素基于对角线对称交换,叫做矩阵的转置transpose。
例:
1,4,7,10是对角线,在转置时保持不变。
在非方阵的情况下,转置后对角线仍然保持不变。
我们看一个2*3矩阵的例子:
对角线是1和8.2.
我们转置一下:
虽然从一个宽矩阵变成了高矩阵,但是对角线仍然是1和8.2.
矩阵的数学运算
加减运算
两个行列相同的矩阵可以进行加减运算。
例:
广播运算
例:
矩阵乘积
"*"运算在矩阵乘法中,跟上节所讲一样,还是Hadamard积,就是对应元素的积,例:
我们也可以用matmul函数,或者"@"运算符计算矩阵相乘的结果:
"@"是高版本Python中支持的操作,在tensorflow中重载它的函数为matmul。
逆矩阵 Inverse Matrices
定义I为单位对角矩阵,如果BA=I,那么我就说B是A的逆矩阵。可以通过matrix_inverse函数来获得逆矩阵,例:
我们来验算一下i01_rev与i01相乘是不是单位矩阵:
果然是。
对角阵比较特殊,还满足交换律:
求行列式的值以判断是否有逆矩阵
我们学习线性代数知道,如果一个矩阵要想有逆矩阵,它的行列式一定不能为0。
在Matlab和mathematica两大著名数学软件中,求行列式的函数名字很简单,就是det。
Tensorflow因为是个库,所以名字比较长,叫tf.matrix_determinant.
我们来看一个例子:
利用逆矩阵求解线性方程组
假设有下列方程组,求解:
这个题中的系数矩阵就是我们刚才例子中的矩阵,我们已经求得行列式值为-8不等于0,所以我们可以通过用系数矩阵的逆矩阵乘以常数向量的方式求解。
最后求得,x=1.5, y=0.875, z = -1.375.
详情请阅读原文