1.tensorflow的概念
TensorFlow=Tensor + Flow
Tensor(張量)
- 數據結構:多維數組
Flow(流) - 計算模型:張量之間通過計算而轉換的過程
TensorFlow是一個通過計算圖的形式表述計算的編程系統,每一個計算都是計算圖上的一個節點,節點之間的邊描述了計算之間的關係
2.計算圖(數據流圖)的概念
計算圖是一個有向圖,由以下內容構成: - 一組節點,每個節點都代表一個操作,一種運算
- 一組有向邊,每條邊打標節點之間的關係(數據傳遞和控制依賴)
TensorFlow有兩種邊: - 常規邊(實線):代表數據依賴關係。一個節點的運算輸出成爲另一個節點的輸入,兩個節點之間有tensor流動(值傳遞)
- 特殊邊(虛線):不攜帶值,表示兩個節點之間的控制相關性。比如,happens-before關係,源節點必須在目的節點執行前完成執行
數據流圖優勢:
(1)並行計算快
(2)分佈式計算快
(3)預編譯優化(XLA)
(4)可移植性好
一個簡單的計算圖
生成的計算圖如下:
3.張量的概念
在TensorFlow中,所有的數據都通過張量的形式來表示 - 從功能的角度,張量可以簡單理解爲多維數組
零階張量表示標量(scalar),也就是一個數;
一階張量爲向量(vector),也就是一維數組;
n階張量可以理解爲一個n維數組; - 張量並沒有真正保存數字,它保存的是計算過程
張量的屬性
名字(name):
“node:srv_output”:node 節點名稱,src_output 來自節點的第幾個輸出
形狀(shape):
張量的維度信息,shape=(),表示是標量
類型(type):
每一個張量會有一個唯一的類型
TensorFlow會對參與運算的所有張量進行類型的檢查,發現類型不匹配時會報錯
張量的形狀
三個術語描述張量的維度:階(rank)、形狀(shape)、維數(dimension number)
張量的階
張量的階(rank)表示了張量的維度
獲取張量的元素
階爲1的張量等價於向量;
階爲2的張量等價於矩陣,通過t[i,j]獲取元素;
階爲3的張量,通過t[i,j,k]獲取元素
注意:下標從0開始
張量的類型
TensorFlow支持14種不同的類型
實數 tf.float32,tf.float64
整數 tf.int8,tf.int16,tf.int32,tf.int64,tf.uint8
布爾 tf.bool
複數 tf.complex64,tf.complex128
默認類型:
不帶小數點的數會被默認爲int32
帶小數點的會被默認爲float32
4.操作
- 計算機中的節點就是操作(Operation)
一次加法是一個操作
一次乘法也是一個操作
構建一些變量的初始值也是一個操作 - 每個運算操作都有屬性,它在構建圖的時候需要確定下來
- 操作可以和計算設備綁定,指定操作在某個設備上執行
- 操作之間存在順序關係,這些操作之間的依賴就是“邊”
- 如果操作A的輸入是操作B執行的結果,那麼這個操作A就依賴於操作B
在使用tensorflow搭建深度模型基本步驟包括:
定義tensorflow輸入節點
定義學習的參數變量
定義運算
優化函數及優化目標
初始化所有變量
迭代更新參數
測試模型
使用模型