Tensorflow計算模型 —— 計算圖


轉載自:http://blog.csdn.net/john_xyz/article/details/69053626

  Tensorflow是一個通過計算圖的形式來表述計算的編程系統,計算圖也叫數據流圖,可以把計算圖看做是一種有向圖,Tensorflow中的每一個計算都是計算圖上的一個節點,而節點之間的邊描述了計算之間的依賴關系。

計算圖的使用

  在tensorflow程序中,系統會維護一個默認的計算圖,通過tf.get_default_graph()函數可以獲取當前默認的計算圖,為了向默認的計算圖中添加一個操作,我們只需要簡單的調用一個函數:

c = tf.constant(3.0) 
assert c.graph == tf.get_default_graph()

  除了使用默認的計算圖,Tensorflow支持通過tf.Graph()函數來生成新的計算圖,不同計算圖的張量和運算都不會共享,使用tf.Graph.as_default()覆蓋當前的默認圖。

g = tf.Graph()
with g.as_default():
    c = tf.constant(3.0)
    assert c.graph is g

 

#coding:utf-8
import tensorflow as tf

g1 = tf.Graph()
with g1.as_default():
    # 在圖g1中定義初始變量c, 並設置初始值為0
    v = tf.get_variable("v", shape=[1], initializer = tf.zeros_initializer(dtype=tf.float32))

g2 = tf.Graph()
with g2.as_default():
    # 在圖g1中定義初始變量c, 並設置初始值為1
    v = tf.get_variable("v", shape=[1], initializer = tf.ones_initializer(dtype=tf.float32))

with tf.Session(graph=g1) as sess:
    sess.run(tf.global_variables_initializer())
    with tf.variable_scope('', reuse=True):
        # 輸出值為0
        print sess.run(tf.get_variable("v"))

with tf.Session(graph=g2) as sess:
    sess.run(tf.global_variables_initializer())
    with tf.variable_scope('', reuse=True):
       # 輸出值為1
       print sess.run(tf.get_variable('v'))

 

  上面的代碼產生了兩個計算圖,當運行不同的計算圖時,變量v的值是不一樣的。同時,計算圖Graph通過tf.Graph.device()函數來制定運行計算圖的設備, 下圖定義的程序可以將加法計算跑在GPU上

g = tf.Graph()
# 指定計算運行的設備
with g.device('/gpu:0'):
    result = a + b

 

  在一個計算圖中,可以通過集合(collection)來管理不同類別的資源,一個計算圖Graph實例支持任意數量的 name定義的collection, 當構建一個計算圖時,collections可以存儲一組相關的對象。

  例如:tf.Variables使用一個collection (named tf.GraphKeys.GLOBAL_VARIABLES)存儲所有的變量,當構建計算圖的時候。可以通過tf.add_to_collection()函數將資源加入一個collection中,然后通過tf.get_collection獲取一個集合里面的所有資源。

       tensorflow中自動管理了一些常用的集合,如下表:

 

集合名稱

集合內容 

使用場景

tf.GraphKeys.VARIABLES

所有變量

持久化tensorflow模型

tf.GraphKeys.TRAINABLE_VARIABLES

可學習的變量(一般指神經網絡中的參數)

模型訓練、生成模型可視化內容

tf.GraphKeys.SUMMARIES

日志生成相關的張量

tensorflow計算可視化

tf.GraphKeys.QUEUE_RUNNERS

處理輸入的QueueRunner

輸入處理

tf.GraphKeys.MOVING_AVERAGE_VARIABLES

所有計算了滑動平均值的變量

計算變量的滑動平均值

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM