# 使用矩陣
了解 TensorFlow 如何與矩陣一起工作對于通過計算圖來理解數據流非常重要。
> 值得強調的是矩陣在機器學習(以及一般數學)中的重要性。大多數機器學習算法在計算上表示為矩陣運算。本書未涉及矩陣屬性和矩陣代數(線性代數)的數學背景,因此強烈建議讀者充分了解矩陣以適應矩陣代數。
## 做好準備
許多算法依賴于矩陣運算。 TensorFlow 為我們提供了易于使用的操作來執行此類矩陣計算。對于以下所有示例,我們首先通過運行以下代碼來創建圖會話:
```py
import tensorflow as tf
sess = tf.Session()
```
## 操作步驟
我們將按如下方式處理秘籍:
1. 創建矩陣:我們可以從 NumPy 數組或嵌套列表創建二維矩陣,正如我們在創建和使用張量秘籍中所描述的那樣。我們還可以使用張量創建函數并為`zeros()`,`ones()`,`truncated_normal()`等函數指定二維形狀。 TensorFlow 還允許我們使用`diag()`函數從一維數組或列表創建對角矩陣,如下所示:
```py
identity_matrix = tf.diag([1.0, 1.0, 1.0])
A = tf.truncated_normal([2, 3])
B = tf.fill([2,3], 5.0)
C = tf.random_uniform([3,2])
D = tf.convert_to_tensor(np.array([[1., 2., 3.],[-3., -7., -1.],[0., 5., -2.]]))
print(sess.run(identity_matrix))
[[ 1\. 0\. 0.]
[ 0\. 1\. 0.]
[ 0\. 0\. 1.]]
print(sess.run(A))
[[ 0.96751703 0.11397751 -0.3438891 ]
[-0.10132604 -0.8432678 0.29810596]]
print(sess.run(B))
[[ 5\. 5\. 5.]
[ 5\. 5\. 5.]]
print(sess.run(C))
[[ 0.33184157 0.08907614]
[ 0.53189191 0.67605299]
[ 0.95889051 0.67061249]]
print(sess.run(D))
[[ 1\. 2\. 3.]
[-3\. -7\. -1.]
[ 0\. 5\. -2.]]
```
> 請注意,如果我們再次運行`sess.run(C)`,我們將重新初始化隨機變量并最終得到不同的隨機值。
1. 加法,減法和乘法:要添加,減去或相乘相同維度的矩陣,TensorFlow 使用以下函數:
```py
print(sess.run(A+B))
[[ 4.61596632 5.39771316 4.4325695 ]
[ 3.26702736 5.14477345 4.98265553]]
print(sess.run(B-B))
[[ 0\. 0\. 0.]
[ 0\. 0\. 0.]]
Multiplication
print(sess.run(tf.matmul(B, identity_matrix)))
[[ 5\. 5\. 5.]
[ 5\. 5\. 5.]]
```
值得注意的是,`matmul()`函數具有參數,用于指定是否在乘法之前轉置參數或每個矩陣是否稀疏。
> 請注意,未明確定義矩陣除法。雖然許多人將矩陣劃分定義為乘以逆,但與實數除法相比,它基本上是不同的。
1. 轉置:轉置矩陣(翻轉列和行),如下所示:
```py
print(sess.run(tf.transpose(C)))
[[ 0.67124544 0.26766731 0.99068872]
[ 0.25006068 0.86560275 0.58411312]]
```
同樣,值得一提的是,重新初始化為我們提供了與以前不同的價值觀。
1. 行列式:要計算行列式,請使用以下內容:
```py
print(sess.run(tf.matrix_determinant(D)))
-38.0
```
1. 反向:要查找方陣的倒數,請參閱以下內容:
```py
print(sess.run(tf.matrix_inverse(D)))
[[-0.5 -0.5 -0.5 ]
[ 0.15789474 0.05263158 0.21052632]
[ 0.39473684 0.13157895 0.02631579]]
```
> 只有當矩陣是對稱正定時,逆方法才基于 Cholesky 分解。如果矩陣不是對稱正定,那么它基于 LU 分解。
1. 分解:對于 Cholesky 分解,請使用以下內容:
```py
print(sess.run(tf.cholesky(identity_matrix)))
[[ 1\. 0\. 1.]
[ 0\. 1\. 0.]
[ 0\. 0\. 1.]]
```
1. 特征值和特征向量:對于特征值和特征向量,請使用以下代碼:
```py
print(sess.run(tf.self_adjoint_eig(D))
[[-10.65907521 -0.22750691 2.88658212]
[ 0.21749542 0.63250104 -0.74339638]
[ 0.84526515 0.2587998 0.46749277]
[ -0.4880805 0.73004459 0.47834331]]
```
注意,`self_adjoint_eig()`函數輸出第一行中的特征值和剩余向量中的后續向量。在數學中,這被稱為矩陣的特征分解。
## 工作原理
TensorFlow 為我們提供了開始使用數值計算并將這些計算添加到圖中的所有工具。對于簡單的矩陣運算,這種表示法可能看起來很重。請記住,我們正在將這些操作添加到圖中,并告訴 TensorFlow 哪些張量運行這些操作。雖然現在看起來似乎很冗長,但它有助于我們理解后面章節中的符號,這種計算方式將使我們更容易實現目標。
- TensorFlow 入門
- 介紹
- TensorFlow 如何工作
- 聲明變量和張量
- 使用占位符和變量
- 使用矩陣
- 聲明操作符
- 實現激活函數
- 使用數據源
- 其他資源
- TensorFlow 的方式
- 介紹
- 計算圖中的操作
- 對嵌套操作分層
- 使用多個層
- 實現損失函數
- 實現反向傳播
- 使用批量和隨機訓練
- 把所有東西結合在一起
- 評估模型
- 線性回歸
- 介紹
- 使用矩陣逆方法
- 實現分解方法
- 學習 TensorFlow 線性回歸方法
- 理解線性回歸中的損失函數
- 實現 deming 回歸
- 實現套索和嶺回歸
- 實現彈性網絡回歸
- 實現邏輯回歸
- 支持向量機
- 介紹
- 使用線性 SVM
- 簡化為線性回歸
- 在 TensorFlow 中使用內核
- 實現非線性 SVM
- 實現多類 SVM
- 最近鄰方法
- 介紹
- 使用最近鄰
- 使用基于文本的距離
- 使用混合距離函數的計算
- 使用地址匹配的示例
- 使用最近鄰進行圖像識別
- 神經網絡
- 介紹
- 實現操作門
- 使用門和激活函數
- 實現單層神經網絡
- 實現不同的層
- 使用多層神經網絡
- 改進線性模型的預測
- 學習玩井字棋
- 自然語言處理
- 介紹
- 使用詞袋嵌入
- 實現 TF-IDF
- 使用 Skip-Gram 嵌入
- 使用 CBOW 嵌入
- 使用 word2vec 進行預測
- 使用 doc2vec 進行情緒分析
- 卷積神經網絡
- 介紹
- 實現簡單的 CNN
- 實現先進的 CNN
- 重新訓練現有的 CNN 模型
- 應用 StyleNet 和 NeuralStyle 項目
- 實現 DeepDream
- 循環神經網絡
- 介紹
- 為垃圾郵件預測實現 RNN
- 實現 LSTM 模型
- 堆疊多個 LSTM 層
- 創建序列到序列模型
- 訓練 Siamese RNN 相似性度量
- 將 TensorFlow 投入生產
- 介紹
- 實現單元測試
- 使用多個執行程序
- 并行化 TensorFlow
- 將 TensorFlow 投入生產
- 生產環境 TensorFlow 的一個例子
- 使用 TensorFlow 服務
- 更多 TensorFlow
- 介紹
- 可視化 TensorBoard 中的圖
- 使用遺傳算法
- 使用 k 均值聚類
- 求解常微分方程組
- 使用隨機森林
- 使用 TensorFlow 和 Keras