我是程序员一个Java码农眼中的技术世界机器学习

Tensorflow快餐教程(4) - 矩阵

2018-04-25  本文已影响249人  阿里云云栖号

摘要: 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.

详情请阅读原文

上一篇下一篇

猜你喜欢

热点阅读