Tensorflow快餐教程(4) - 矩阵

作者: 阿里云云栖号 | 来源:发表于2018-04-25 16:55 被阅读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.

    详情请阅读原文

    相关文章

      网友评论

        本文标题:Tensorflow快餐教程(4) - 矩阵

        本文链接:https://www.haomeiwen.com/subject/tihylftx.html