1. 程式人生 > >演算法工程師修仙之路:TensorFlow(一)

演算法工程師修仙之路:TensorFlow(一)

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中維護的集合列表
    在這裡插入圖片描述