TensorFlow是一個經過計算圖的形式來表述計算的編程系統。其中的Tnesor,表明它的數據結構,而Flow表明它的計算模型。TensorFlow中的每個計算都是計算圖上的一個節點,而節點之間的線描述了計算之間的依賴關係。編程
在TensorFlow程序中,系統會自動維護一個默認的計算圖,經過tf.get_default_gragh函數能夠獲取當前默認的計算圖。網絡
除了默認的計算圖,TensorFlow也支持經過tf.Graph函數來生成新的計算圖。不一樣的計算圖上的張量和運算不會共享。以下示例:數據結構
#coding:utf-8 import tensorflow as tf g1 = tf.Graph() with g1.as_default(): #在計算圖g1中定義一個變量v,而且設置初始值爲0 v = tf.get_variable(name="v",initializer=tf.zeros_initializer( )(shape=[1])) g2 = tf.Graph() with g2.as_default(): # 在計算圖g2中定義一個變量v,而且設置初始值爲0 v = tf.get_variable(name="v", initializer=tf.ones_initializer( )(shape=[1])) with tf.Session(graph=g1) as sess: # 運行初始化的兩種方法 init = tf.global_variables_initializer() sess.run(init)
#這個方法已通過時 #tf.initialize_all_variables().run() #這句話是什麼意思? with tf.variable_scope("",reuse=True): #經過名字獲取變量 print(sess.run(tf.get_variable("v"))) with tf.Session(graph=g2) as sess: # 運行初始化的兩種方法 init = tf.global_variables_initializer() sess.run(init) #tf.initialize_all_variables().run() #這句話是什麼意思? with tf.variable_scope("",reuse=True): #經過名字獲取變量 print(sess.run(tf.get_variable("v")))
上面的代碼產生了兩個計算圖,每一個計算圖中定義了一個名字爲「v」的變量。在計算圖g1中,將v初始化爲0;在計算圖g2中,將v初始化爲1.因而可知,當運行不一樣的計算圖時,變量v的值也不同。函數
Tensorflow中的計算圖不單單能夠用來隔離張量和運算,還能夠提供管理張量和運算的機制。學習
計算圖能夠經過tf.Graph.device()函數來指定運行的設備。這是由於tensorflow使用了GPU機制。一下代碼演示指派GPU的操做。spa
import tensorflow as tf a = tf.constant([1,2]) b = tf.constant([3,4]) g = tf.Graph() with g.device('/gpu:0'): c = tf.add(a, b, "add") with tf.Session() as sess: print(sess.run(c))
在一個計算圖中,能夠經過集合(collection)來管理不一樣類別的資源。好比經過tf.add_to_collection()函數將資源加入一個或多個集合中。而後經過tf.get_collection獲取集合中的全部資源。這裏的資源能夠是張量、變量或者運行Tensorflow程序所須要的隊列資源等等。日誌
TensorFlow中維護的集合列表code
集合名稱 | 集合內容 | 使用場景 |
---|---|---|
tf.GraphKeys.VARIABLES |
全部變量 | 持久化TensorFlow模型 |
tf.GraphKeys.TRAINABLE_VARIABLES |
可學習的變量(通常指神經網絡中的參數) | 模型訓練、生成模型可視化內容 |
tf.GraphKeys.SUMMARIES |
日誌生成相關的張量 | TensorFlow計算可視化 |
tf.GraphKeys.QUEUE_RUNNERS |
處理輸入的QueueRunner | 輸入處理 |
tf.GraphKeys.MOVING_AVERAGE_VARIABLES |
全部計算了滑動平均值的變量 | 計算變量的滑動平均值 |