Tensorflow快餐教程(4) - 矩阵

摘要: Tensorflow矩阵基础运算

矩阵

矩阵的初始化

矩阵因为元素更多,所以初始化函数更多了。光靠tf.linspace,tf.range之类的线性生成函数已经不够用了。

可以通过先生成一个线性序列,然后再reshape成一个矩阵的方式来初始化。

例:

Tensorflow快餐教程(4) - 矩阵_第1张图片

tf.linspace生成了(16,)的一个向量,然后被reshape成(4,4)的矩阵。

生成全0值的矩阵

tf.zeros可以生成全0的矩阵,不指定类型时,默认为float32.

Tensorflow快餐教程(4) - 矩阵_第2张图片

可以指定数据类型:

Tensorflow快餐教程(4) - 矩阵_第3张图片

生成全1的矩阵

类似地,我们可以用tf.ones生成值全为1的矩阵。

例:

Tensorflow快餐教程(4) - 矩阵_第4张图片

将矩阵全部设成一个值

tf.ones和tf.zeros其实是特例,tf.fill才是更通用的功能:

Tensorflow快餐教程(4) - 矩阵_第5张图片

生成对角矩阵

矩阵一个特点是经常是只有稀疏的值。最常用的就是对角阵,只有一条对角线上有值。

例:

Tensorflow快餐教程(4) - 矩阵_第6张图片

除了生成对角阵,我们还可以从一个矩阵中将对角线值获取成一个向量:

Tensorflow快餐教程(4) - 矩阵_第7张图片

随机生成初始化值

除了全0,全1,全确定值和对角线值,还有一种非常常用的方式就是生成随机值。

我们可以按正态分布来生成初始值:

Tensorflow快餐教程(4) - 矩阵_第8张图片

可以指定平均值和标准差,默认均值为0,标准差为1。默认的类型为float32,反正不支持整数。

例:

Tensorflow快餐教程(4) - 矩阵_第9张图片

矩阵的转置

将矩阵中的元素基于对角线对称交换,叫做矩阵的转置transpose。

例:

Tensorflow快餐教程(4) - 矩阵_第10张图片

1,4,7,10是对角线,在转置时保持不变。

在非方阵的情况下,转置后对角线仍然保持不变。

我们看一个2*3矩阵的例子:

Tensorflow快餐教程(4) - 矩阵_第11张图片

对角线是1和8.2.

我们转置一下:

Tensorflow快餐教程(4) - 矩阵_第12张图片

虽然从一个宽矩阵变成了高矩阵,但是对角线仍然是1和8.2.

矩阵的数学运算

加减运算

两个行列相同的矩阵可以进行加减运算。

例:

Tensorflow快餐教程(4) - 矩阵_第13张图片

广播运算

例:

Tensorflow快餐教程(4) - 矩阵_第14张图片

矩阵乘积

"*"运算在矩阵乘法中,跟上节所讲一样,还是Hadamard积,就是对应元素的积,例:

Tensorflow快餐教程(4) - 矩阵_第15张图片

我们也可以用matmul函数,或者"@"运算符计算矩阵相乘的结果:

Tensorflow快餐教程(4) - 矩阵_第16张图片

"@"是高版本Python中支持的操作,在tensorflow中重载它的函数为matmul。

逆矩阵 Inverse Matrices

定义I为单位对角矩阵,如果BA=I,那么我就说B是A的逆矩阵。可以通过matrix_inverse函数来获得逆矩阵,例:

Tensorflow快餐教程(4) - 矩阵_第17张图片

我们来验算一下i01_rev与i01相乘是不是单位矩阵:

Tensorflow快餐教程(4) - 矩阵_第18张图片

果然是。

对角阵比较特殊,还满足交换律:

Tensorflow快餐教程(4) - 矩阵_第19张图片

求行列式的值以判断是否有逆矩阵

我们学习线性代数知道,如果一个矩阵要想有逆矩阵,它的行列式一定不能为0。

在Matlab和mathematica两大著名数学软件中,求行列式的函数名字很简单,就是det。

Tensorflow因为是个库,所以名字比较长,叫tf.matrix_determinant.

我们来看一个例子:

Tensorflow快餐教程(4) - 矩阵_第20张图片

利用逆矩阵求解线性方程组

假设有下列方程组,求解:

这个题中的系数矩阵就是我们刚才例子中的矩阵,我们已经求得行列式值为-8不等于0,所以我们可以通过用系数矩阵的逆矩阵乘以常数向量的方式求解。

Tensorflow快餐教程(4) - 矩阵_第21张图片

最后求得,x=1.5, y=0.875, z = -1.375.

详情请阅读原文

你可能感兴趣的:(Tensorflow快餐教程(4) - 矩阵)