1. 程式人生 > >TensorFlow計算模型—計算圖

TensorFlow計算模型—計算圖

數據 計算模型 場景 關系 variables 日誌 自動 可見 font

  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的操作。

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中維護的集合列表

集合名稱集合內容使用場景
tf.GraphKeys.VARIABLES 所有變量 持久化TensorFlow模型
tf.GraphKeys.TRAINABLE_VARIABLES 可學習的變量(一般指神經網絡中的參數) 模型訓練、生成模型可視化內容
tf.GraphKeys.SUMMARIES 日誌生成相關的張量 TensorFlow計算可視化
tf.GraphKeys.QUEUE_RUNNERS 處理輸入的QueueRunner 輸入處理
tf.GraphKeys.MOVING_AVERAGE_VARIABLES 所有計算了滑動平均值的變量 計算變量的滑動平均值

TensorFlow計算模型—計算圖