1.計算圖的概念:
計算圖:輸入和計算函數都以節點的形式出現,而節點的輸出項之間的關系以有向線段表示所構成的計算圖形。
如:向量a, b 相加:
2. 計算圖的使用:
注意:Tensorflow程序一般分兩步:定義計算圖中所有計算;執行計算
在tensorflow代碼執行的時候,tensorflow會自定定義一個默認的計算圖,可以通過tf.get_default_graph函數來獲取當前默認的計算圖
import tensorflow as tf '''tensorflow程序第一步:定義計算圖中所有計算''' a=tf.constant([1.0, 2.0], name="a") b=tf.constant([2.0, 3.0], name="b") result=a+b '''判斷a節點是不是在默認節點中''' print(a.graph is tf.get_default_graph()) print(b.graph is tf.get_default_graph()) 輸出: True True
當然,可以使用tf.Graph函數來生成新的計算圖。
注意:計算圖其實是一種數據結構,則上面的數據和運算不會相互共享。
import tensorflow as tf '''tensorflow第一步:定義所有計算''' g1=tf.Graph() with g1.as_default(): '''在計算圖g1中定義變量“v",並初始化為0''' v=tf.get_variable( "v", shape=[1,2],initializer=tf.zeros_initializer ) g2=tf.Graph() with g2.as_default(): '''在計算圖g2中定義變量“v",初始化為1''' v=tf.get_variable( "v", shape=[2,3],initializer=tf.ones_initializer ) '''tensorflow第二步:運行計算''' with tf.Session(graph=g1) as sess: tf.initialize_all_variables().run() #初始化所有變量 with tf.variable_scope("", reuse=True): print(sess.run(tf.get_variable("v"))) #獲取變量v with tf.Session(graph=g2) as sess: tf.initialize_all_variables().run() with tf.variable_scope("", reuse=True): print(sess.run(tf.get_variable("v"))) 輸出: [[0. 0.]] [[1. 1. 1.] [1. 1. 1.]]
計算圖由節點和關系構成,那么計算圖的資源如何給用戶比較方便的調用呢?
在一個計算圖中可以使用集合(collection)來管理整個資源。這里的資源具體指的是張量,變量,或者隊列等。
tf.add_to_collection函數將資源加入一個或者多個collection
tf.get_collection函數,獲取指定collection中的所有資源
幾個常用的集合