演算法工程師修仙之路:TensorFlow(一)
阿新 • • 發佈:2019-01-13
TensorFlow 入門
TensorFlow 計算模型一一計算圖
計算圖的概念
-
計算圖是 TensorFlow 中最基本的一個概念, TensorFlow 中的所有計算都會被轉化為計算圖上的節點 。
-
Tensor 就是張量,在 TensorFlow 中,張量可以被簡單地理解為多維陣列。
-
Flow 就是“流”,它直觀地表達了張量之間通過計算相互轉化的過程。
-
TensorFlow 是一個通過計算圖的形式來表述計算的程式設計系統,TensorFlow中的每一個計算都是計算圖上的一個節點,而節點之間的邊描述了計算之間的依賴關係。
-
如果一個運算的輸入依賴於另 一個運算的輸出,那麼這兩個運算有依賴關係。
計算圖的使用
-
TensorFlow 程式一般可以分為兩個階段。在第一個階段需要定義計算圖中所有的計算,第二個階段為執行計算。
# 在Python中一般會採用“ impot tensorflow as tf”的形式來載入TensorFlow, # 這樣可以使用“tf”來代替“tensorflow”作為模組名稱,使得整個程式更加簡潔。 import tensorflow as tf a = tf.constant([1.0, 2.0], name = "a") b = tf.constant([2.0, 3.0], name = "b") result = a + b
-
在這個過程中,TensorFlow 會自動將定義的計算轉化為計算圖上的節點 。在 TensorFlow 程式中,系統會自動維護一個預設的計算圖,通過tf.get_default_graph 函式可以獲取當前預設的計算圖。
# 通過a.graph可以檢視張量所屬的計算圈。 # 因為沒有特意指定,所以這個計算圖應該等於當前預設的計算圈。 # 所以下面這個操作輸出值為True。 print(a.graph is tf.get_default_graph())
-
除了使用預設的計算圖,TensorFlow 支援通過 tf.Graph 函式來生成新的計算圖,不同計算圖上的張量和運算都不會共享。
# 如何在不同計算圖上定義和使用變數。 g1 = tf.Graph() with g1.as_default(): # 在計算圖gl中定義變數“v”,並設定初始值為0。 # 注意tf.zeros_initializer後面需要跟一個(),否則會報錯,這是新版python的特性。 v = tf.get_variable("v", initializer=tf.zeros_initializer()(shape=[1])) g2 = tf.Graph() with g2.as_default(): # 在計算圖gl中定義變數“v”,並設定初始值為1。 # 注意tf.ones_initializer後面需要跟一個(),否則會報錯,這是新版python的特性。 v = tf.get_variable("v", initializer=tf.ones_initializer()(shape=[1])) # 在計算圖gl中讀取變數“v”的取值。 with tf.Session(graph=g1) as sess: tf.global_variables_initializer().run() with tf.variable_scope("", reuse=True): # 在計算圖gl中,變數“v”的取值應該為0,所以下面這行會輸出[0.]。 print(sess.run(tf.get_variable("v"))) # 在計算圖g2中讀取變數“v”的取值。 with tf.Session(graph=g2) as sess: tf.global_variables_initializer().run() with tf.variable_scope("", reuse=True): # 在計算圖g2中,變數“v”的取值應該為1,所以下面這行會輸出[1.]。 print(sess.run(tf.get_variable("v")))
-
TensorFlow 中的計算圖不僅僅可以用來隔離張量和計算,它還提供了管理張量和計算的機制。計算圖可以通過 tf.Graph.device 函式來指定執行計算的裝置,這為 TensorFlow 使用 GPU 提供了機制。
-
在一個計算圖中,可以通過集合(collection)來管理不同類別的資源。
- 比如通過 tf.add_to_collection 函式可以將資源加入一個或多個集合中,然後通過tf.get_collection 獲取一個集合裡面的所有資源。
- 這裡的資源可以是張量、變數或者執行TensorFlow 程式所需要的佇列資源等等。
-
TensorFlow中維護的集合列表