TensorFlow入门:计算图
目錄
1. 介紹
2.?什么是數據流圖(Data Flow Graph)?
3. 基本概念
3.1 計算圖(The computation graph)
1.?構建圖
2.?啟動圖
1. 介紹
? ? ? ?TensorFlow是一個采用數據流圖(data flow graphs),用于數值計算的開源軟件庫。TensorFlow 最初由Google大腦小組(隸屬于Google機器智能研究機構)的研究員和工程師們開發出來,用于機器學習和深度神經網絡方面的研究,但這個系統的通用性使其也可廣泛用于其他計算領域。它是谷歌基于DistBelief進行研發的第二代人工智能學習系統。2015年11月9日,Google發布人工智能系統TensorFlow并宣布開源。?
2.?什么是數據流圖(Data Flow Graph)?
? ? ? ? 數據流圖用“節點”(nodes)和“線”(edges)的有向圖來描述數學計算。“節點”一般用來表示施加的數學操作,但也可以表示數據輸入(feed in)的起點/輸出(push out)的終點,或者是讀取/寫入持久變量(persistent variable)的終點。“線”表示“節點”之間的輸入/輸出關系。這些數據“線”可以運輸“size可動態調整”的多維數組,即“張量”(tensor)。一旦輸入端所有張量準備好,節點將被分配到各種計算設備完成異步并行地執行計算。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??? ? ? ? ? ? ? ??
3. 基本概念
?使用TensorFlow前必須明白的基本概念:?
- 圖(Graph):圖描述了計算的過程,TensorFlow使用圖來表示計算任務。?
- 張量(Tensor):TensorFlow使用tensor表示數據。每個Tensor是一個類型化的多維數組。?
- 操作(op):圖中的節點被稱為op(operation的縮寫),一個op獲得0個或多個Tensor,執行計算,產生0個或多個Tensor。 op=節點
- 會話(Session):圖必須在稱之為“會話”的上下文中執行。會話將圖的op分發到諸如CPU或GPU之類的設備上執行。?
- 變量(Variable):運行過程中可以被改變,用于維護狀態。
3.1 計算圖(The computation graph)
? ? ? ?Tensorflow是一種計算圖模型,即用圖的形式來表示運算過程的一種模型。Tensorflow程序一般分為圖的構建和圖的執行兩個階段。構建階段,也稱為圖的定義階段,在構建階段op的執行步驟被描述成一個圖,每次運算的的結果以及原始的輸入數據都可稱為一個節點(operation ,縮寫為op)。在執行階段,使用會話執行圖中的op。
1.?構建圖
? ? ? ?構建階段:只在圖中定義所需要的運算,而沒有去執行運算
? ? ? ?構建圖的第一步是創建源op(sources op)。源op不需要任何輸入,例如常量(Constant)。源op的輸出被傳遞給其他op做運算。
? ? ? 在TensorFlow的Python庫中,op構造器的返回值代表這個op的輸出。這些返回值可以作為輸入傳遞給其他op構造器。
? ? ? TensorFlow的Python庫中包含了一個默認的graph,可以在上面使用添加節點。如果你的程序需要多個graph那就需要使用Graph類管理多個graph。
import tensorflow as tf# 創建一個常量 op, 產生一個 1x2 矩陣. 這個 op 被作為一個節點,加到默認圖中。構造器的返回值代表該常量 op 的返回值. matrix1 = tf.constant([[3., 3.]])# 創建另外一個常量 op, 產生一個 2x1 矩陣. matrix2 = tf.constant([[2.],[2.]])# 創建一個矩陣乘法 matmul op , 把 'matrix1' 和 'matrix2' 作為輸入。返回值 'product' 代表矩陣乘法的結果. product = tf.matmul(matrix1, matrix2)? ? ? ? 默認圖中包含了3個節點:兩個constant() op和一個matmul() op。為了真正的執行矩陣相乘運算,并得到矩陣乘法的結果,你必須在會話中啟動這個圖。
2.?啟動圖
? ? ? ?執行階段:也就是在會話(session)中執行圖模型中定義好的運算。
? ? ? ?構造階段完成后,才能在會話中啟動圖。啟動圖的第一步是創建一個Session對象。如果沒有任何參數,會話構造器將啟動默認圖。
# 啟動默認圖模型 sess = tf.Session()# 調用run()方法啟動、運行圖模型 result = sess.run(product) print result # ==> [[ 12.]]# 任務完成, 關閉會話. sess.close()# 調用 sess 的 'run()' 方法來執行矩陣乘法 op, 傳入 'product' 作為該方法的參數. # 上面提到, 'product' 代表了矩陣乘法 op 的輸出, 傳入它是向方法表明, 我們希望取回 # 矩陣乘法 op 的輸出. # # 整個執行過程是自動化的, 會話負責傳遞 op 所需的全部輸入. op 通常是并發執行的. # # 函數調用 'run(product)' 觸發了圖中三個 op (兩個常量 op 和一個矩陣乘法 op) 的執行. # # 返回值 'result' 是一個 numpy `ndarray` 對象.Session對象在使用完成或需要關閉以釋放資源。除了顯示調用close外,也可以使用“with”代碼塊來自動完成關閉動作。
with tf.Session() as sess: result = sess.run([product]) print result? ? ? ?此外,我們還可以利用CPU或GPU等計算資源分布式執行圖的運算過程。一般我們無需顯示的指定計算資源,Tensorflow可以自動地進行識別,如果檢測到我們的GPU環境,會優先的利用GPU環境執行我們的程序。但如果我們的計算機中有多于一個可用的GPU,這就需要我們手動的指派GPU去執行特定的op。
? ? ? ?如果檢測到GPU,TensorFlow會使用第一個GPU來執行操作。如果機器上有多個GPU,除第一個GPU外的其他GPU是不參與計算的,為了使用這些GPU,你必須將op明確指派給他們執行。with…Device語句用來指派特定的CPU或GPU執行操作:
with tf.Session() as sess:with tf.device("/gpu:1"):matrix1 = tf.constant([[3., 3.]])matrix2 = tf.constant([[2.],[2.]])product = tf.matmul(matrix1, matrix2) ...設備用字符串進行標識. 目前支持的設備包括:?
- “/cpu:0”: 機器的 CPU.?
- “/gpu:0”: 機器的第一個 GPU, 如果有的話.?
- “/gpu:1”: 機器的第二個 GPU, 以此類推.
? ? ? ?Tensorflow中還提供了默認會話的機制,我們通過調用函數as_default()生成默認會話。
import tensorflow as tfmatrix1 = tf.constant([[3., 3.]]) matrix2 = tf.constant([[2.],[2.]]) product = tf.matmul(matrix1, matrix2)sess = tf.Session() with sess.as_default():print(sess.eval())? ? ? ? 我們在啟動默認會話后,可以通過調用eval()函數,直接輸出變量的內容。
? ? ? ? 有時,我們需要在Jupyter或IPython等python交互式環境開發。Tensorflow為了滿足用戶的這一需求,提供了一種專門針對交互式環境開發的方法InteractiveSession():
import tensorflow as tfmatrix1 = tf.constant([[3., 3.]]) matrix2 = tf.constant([[2.],[2.]]) product = tf.matmul(matrix1, matrix2)sess = tf.InteractiveSession() print(sess.eval())? ? ? ? 以上就是交互式環境中經常會使用的InteractiveSession()方法,其創建sess對象后,可以直接輸出運算結果。
? ? ? ?為什么Tensorflow要使用圖模型?圖模型有什么優勢呢?
? ? ? ?首先,圖模型的最大好處是節約系統開銷,提高資源的利用率,可以更加高效的進行運算。因為我們在圖的執行階段,只需要運行我們需要的op,這樣就大大的提高了資源的利用率;其次,這種結構有利于我們提取中間某些節點的結果,方便以后利用中間的節點去進行其它運算;還有就是這種結構對分布式運算更加友好,運算的過程可以分配給多個CPU或是GPU同時進行,提高運算效率;最后,因為圖模型把運算分解成了很多個子環節,所以這種結構也讓我們的求導變得更加方便。
參考:
1.?Tensorflow中文社區
2.?TensorFlow 教程 - 新手入門筆記
總結
以上是生活随笔為你收集整理的TensorFlow入门:计算图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于LSTM的情感分类案例:Tensor
- 下一篇: R语言:异常数据处理