摘要: 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.
详情请阅读原文 http://click.aliyun.com/m/47498/
来源: http://www.jianshu.com/p/18c701f9e24d