TensorFlow 零基礎入門指南
TensorFlow 是一個開發源代碼軟件庫,它可以進行高性能的數值計算與分析,藉助其靈活的架構,可以將其部署到多種平臺(CPU、GPU、TPU)和設備(桌面設備、移動設備、集羣)。TensorFlow 爲機器學習和深度學習提供了很多強有力的支持,本篇文章小編爲大家整理了很多 TensorFlow 的基礎編程知識,非常適合初學者學習,一起來看看吧!
1、 TensorFlow 計算模型
TensorFlow 顧名思義,是由 Tensor + Flow 組成,Tensor 叫做張量,主要起到數據結構的作用,Flow 叫做流,用來表示計算模型,即張量之間通過計算而轉換的過程 。TensorFlow 是一個提供計算圖的形式表述計算的編程系統,每一個計算都是計算圖上的一個節點,節點之間的邊描述的計算之間的關係。
計算圖的實例
#一個簡單的計算圖
node1 = tf.constant(3.0,tf.float32,name="node1")
node2 = tf.constant(4.0,tf.float32,name="node2")
node3 = tf.add(node1,node2)
print(node3)
該代碼輸出結果爲:
Tensor( "Add:0", shape( ), dtype = float32 )
要注意的是,這裏輸出的結果不是一個具體的數字,而是一個張量的結構。
計算圖的執行
創建計算圖只是建立了靜態的計算模型,只有執行對話才能提供數據並獲得結果。
#建立對話並顯示運行結果
sess = tf.Session()
print("運行sess.run(node3)的結果是:", sess.run(node3))
#關閉session
sess.close()
該代碼輸出結果爲:運行 sess.run (node3) 的結果是:7.0
2、 Tensor 張量
在 TensorFlow 中,所有的數據都通過張量的形式來表示。
張量可以簡單的理解爲多維數據:
-
零階張量表示標量,即一個數;
-
一階張量表示想來,即一維數組;
- n階張量表示n維數組;
張量沒有真正保存數字,它保存的只是計算過程。
張量的屬性
Tensor( "Add:0", shape( ), dtype = float32 )
由名字 name,形狀 shape 和類型 type 三部分組成:
- 名字(name):node : src_output
- 形狀(shape):張量的維度信息,當shape=()時,表示標量
- 類型(type): 每個張量都會有一個唯一的類型
張量的形狀
例如:張量的階
張量的階表示了張量的維度
階爲1的張量等價於向量;
階爲2的張量等價於矩陣,通過 t [ i, j ]獲取元素;
階爲3的張量,通過 t [ i, j, k ]獲取元素。張量的類型
TensorFlow 支持14種類型:
- 實數:tf.float32,tf.float64
- 整數:tf.int8,tf.int16,tf.int32,tf.int64,tf.uint8
- 布爾:tf.bool
- 複數:tf.complex64,tf.complex128
注意:不帶小數點的數會被默認爲int32,帶小數點的會被默認爲float32.
import tensorflow as tf
a = tf.constant([1,2], name="a")
b = tf.constant([2.0,3.0], name="b")
result = a + b
該代碼運行會報錯,因爲 TensorFlow 會對參與運算的所有張量進行類型的檢查,發現類型不匹配時就會報錯。
3、 Operation 操作
計算圖中的節點就是操作
一次加法是一個操作
一次乘法也是一個操作
構建一些變量的初始值也是一個操作
每個運算操作都是屬性,它在構建圖的時候需要確定下來
操作之間存在順序關係,這些操作之間的依賴就是 “邊”。
4、 Session 會話
會話擁有並管理 TensorFlow 程序運行時的所有資源,當所有計算完成之後需要關閉會話幫助系統回收資源。
會話的模式
import tensorflow as tf
#定義計算圖
a = tf.constant([1,2,3])
#創建一個會話
sess = tf.Session()
#使用這個創建好的會話來得到關心的運算結果
print(sess.run(a))
#關閉會話使得本次運行中使用的資源可以被釋放
sess.close()
這裏需要注意的是:調用Session.close( )函數來關閉會話並釋放資源,當程序因爲異常退出時,關閉會話函數可能就不會被執行從而導致資源泄露。
因此以下代碼可以避免該問題:
import tensorflow as tf
#定義計算圖
a = tf.constant([1,2,3])
#創建一個會話,並通過python中的上下文管理器來管理該會話
with tf.Session() as sess:
#使用這個創建好的會話來得到關心的運算結果
print(sess.run(a))
#關閉會話使得本次運行中使用的資源可以被釋放
#當上下文退出時會話關閉,資源釋放
交互式環境下設置默認會話
在交互式環境下,python 腳本或者 Jupyter 編輯器,通過設置默認會話來獲取張量的取值更加方便。
tf.InteractiveSession 使用這個函數會自動將生成的會話註冊爲默認會話
node1 = tf.constant(3.0,tf.float32,name="node1")
node2 = tf.constant(4.0,tf.float32,name="node2")
node3 = tf.add(node1,node2)
sess = tf.InteractiveSession()
print(node3.eval())
sess.close()
5、 常量與變量
常量 constant
常量是在運算過程中值不會改變的單元,在 TensorFlow 中無需進行初始化操作
常量的創建語句爲:
constant_name = tf.constant(value)
變量 Variable
變量是在運行過程中值會改變的單元,在 TensorFlow 中需要進行初始化操作
變量的創建語句爲:
variable_name = tf.Variable (value, name)
個別變量初始化:
init_op = variable_name.initializer( )
所有變量初始化:
init_op = tf.global_variable_initializer( )
注意:使用了 Variable 變量類型,不進行初始化數值會出現運行錯誤。
6、 佔位符 placeholder
TensorFlow 中的 Variable 變量類型,在定義時需要初始化,但有些變量定義時並不知道其數值,只有當真正開始運行程序時,才由外部輸入,比如訓練數據,這時需要用到佔位符。
tf.placeholder 佔位符,是 TensorFlow 中特有的一種數據結構,類似於動態變量或函數的參數。
佔位符的函數接口如下:
tf.placeholder(dtype, shape = None, name = None)
#此代碼生成一個2*3的二維數組,矩陣中每個元素類型都是tf.float32
x = tf.placeholder(tf.float32,[2,3],name="tx")
如果構建了一個包含 placeholder 操作的計算圖,當在 session 中調用run 方法時,placeholder 佔用的變量必須通過 feed_dict 參數傳遞進去,否則會報錯。
7、 TensorBoard 可視化
TensorBoard 是TensorFlow 的可視化工具
通過 TensorFlow 程序運行過程中輸出的日誌文件可視化 TenorFlow 程序的運行狀態。
在 TensorBoard 中查看圖結構
運行之後會在指定目錄裏產生日誌文件
啓動 TensorBoard
TensorBoard 不需要額外安裝,在 TenorFlow 安裝時已經自動完成。
在 Anaconda Prompt 中先進入日誌存放的目錄,再運行 TensorBoard,並將日誌地址指向程序日誌輸出的地址。
命令:
tensorboard --logdir=/path/log
在瀏覽器訪問網址:http://localhost:6006
TensorBoard 常用API
---------End---------
關注後回覆“w”,加我私人微信
推薦閱讀:
閱讀是投資自己最有效的方式
自律是一種覺醒