運行 TensorFlow
打開一個 python 終端:python
1 $ python 2 >>> import tensorflow as tf 3 >>> hello = tf.constant('Hello, TensorFlow!') 4 >>> sess = tf.Session() 5 >>> print sess.run(hello) 6 Hello, TensorFlow! 7 >>> a = tf.constant(10) 8 >>> b = tf.constant(32) 9 >>> print sess.run(a+b) 10 42 11 >>>
使用 TensorFlow, 你必須明白 TensorFlow:
• 使用圖 (graph) 來表示計算任務.
• 在被稱之爲 會話 (Session) 的上下文 (context) 中執行圖.
• 使用 tensor 表示數據.
• 經過 變量 (Variable) 維護狀態.
• 使用 feed 和 fetch 爲任意操做輸入和輸出數據.編程
綜述
TensorFlow 是一個編程系統, 使用圖來表示計算任務. 圖中的節點被稱之爲 op(operation 的縮寫). 一個 op得到 0 個或多個 Tensor , 執行計算, 產生 0 個或多個 Tensor . 每一個 Tensor 是一個類型化的多維數組. 例如, 你能夠將一小組圖像集表示爲一個四維浮點數數組, 這四個維度分別是 [batch, height, width, channels] .一個TensorFlow 圖 描述 了計算的過程. 爲了進行計算, 圖必須在 會話 裏被啓動. 會話 將圖的 op 分發到諸如 CPU 或 GPU 之類的 設備 上, 同時提供執行 op 的方法. 這些方法執行後, 將產生的 tensor 返回. 在 Python 語言中, 返回的 tensor 是 numpy ndarray 對象; 在 C 和 C++ 語言中, 返回的 tensor 是 tensorflow::Tensor 實例.數組
計算圖
TensorFlow 程序一般被組織成一個構建階段, 和一個執行階段. 在構建階段, op 的執行步驟 被描述成一個圖.在執行階段, 使用會話執行執行圖中的 op.
例如, 一般在構建階段建立一個圖來表示和訓練神經網絡, 而後在執行階段反覆執行圖中的訓練 op.
TensorFlow 支持 C, C++, Python 編程語言. 目前, TensorFlow 的 Python 庫更加易用, 它提供了大量的輔助函數來簡化構建圖的工做, 這些函數還沒有被 C 和 C++ 庫支持.
三種語言的會話庫 (session libraries) 是一致的.網絡
構建圖
構建圖的第一步, 是建立源 op (source op). 源 op 不須要任何輸入, 例如 常量 (Constant) . 源 op 的輸出被傳遞給其它 op 作運算.
Python 庫中, op 構造器的返回值表明被構造出的 op 的輸出, 這些返回值能夠傳遞給其它 op 構造器做爲輸入.
TensorFlow Python 庫有一個 默認圖 (default graph) , op 構造器能夠爲其增長節點. 這個默認圖對 許多程序
來講已經足夠用了. 閱讀 Graph 類 文檔 來了解如何管理多個圖.session
1 import tensorflow as tf 2 # 建立一個常量 op, 產生一個 1x2 矩陣. 這個 op 被做爲一個節點 3 # 加到默認圖中. 4 # 5 # 構造器的返回值表明該常量 op 的返回值. 6 matrix1 = tf.constant([[3., 3.]]) 7 # 建立另一個常量 op, 產生一個 2x1 矩陣. 8 matrix2 = tf.constant([[2.],[2.]]) 9 # 建立一個矩陣乘法 matmul op , 把 'matrix1' 和 'matrix2' 做爲輸入. 10 # 返回值 'product' 表明矩陣乘法的結果. 11 product = tf.matmul(matrix1, matrix2)
默認圖如今有三個節點, 兩個 constant() op, 和一個 matmul() op. 爲了真正進行矩陣相乘運算, 並獲得矩陣乘法的 結果, 你必須在會話裏啓動這個圖.併發
在一個會話中啓動圖
構造階段完成後, 才能啓動圖. 啓動圖的第一步是建立一個 Session 對象, 若是無任何建立參數, 會話構造器
將啓動默認圖.
欲瞭解完整的會話 API, 請閱讀Session 類.編程語言
# 啓動默認圖. sess = tf.Session() # 調用 sess 的 'run()' 方法來執行矩陣乘法 op, 傳入 'product' 做爲該方法的參數. # 上面提到, 'product' 表明了矩陣乘法 op 的輸出, 傳入它是向方法代表, 咱們但願取回 第 1 章 起步 | 21 # 矩陣乘法 op 的輸出. # # 整個執行過程是自動化的, 會話負責傳遞 op 所需的所有輸入. op 一般是併發執行的. # # 函數調用 'run(product)' 觸發了圖中三個 op (兩個常量 op 和一個矩陣乘法 op) 的執行. # # 返回值 'result' 是一個 numpy `ndarray` 對象. result = sess.run(product) print result # ==> [[ 12.]] # 任務完成, 關閉會話. sess.close()