使用 tensorflow, 你必須明白 tensorflow:
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 類 文件 來了解如何管理多個圖.
預設圖現在有三個節點, 兩個
constant()
op, 和乙個
matmul()
op. 為了真正進行矩陣相乘運算, 並得到矩陣乘法的 結果, 你必須在會話裡啟動這個圖.
構造階段完成後, 才能啟**. 啟**的第一步是建立乙個
session
物件, 如果無任何建立引數, 會話構造器將啟動預設圖.
欲瞭解完整的會話 api, 請閱讀session 類.
session
物件在使用完後需要關閉以釋放資源. 除了顯式呼叫 close 外, 也可以使用 "with" **塊 來自動完成關閉動作.
在實現上, tensorflow 將圖形定義轉換成分布式執行的操作, 以充分利用可用的計算資源(如 cpu 或 gpu). 一般你不需要顯式指定使用 cpu 還是 gpu, tensorflow 能自動檢測. 如果檢測到 gpu, tensorflow 會盡可能地利用找到的第乙個 gpu 來執行操作.
如果機器上有超過乙個可用的 gpu, 除第乙個外的其它 gpu 預設是不參與計算的. 為了讓 tensorflow 使用這些 gpu, 你必須將 op 明確指派給它們執行.
with...device
語句用來指派特定的 cpu 或 gpu 執行操作:
裝置用字串進行標識. 目前支援的裝置包括:
文件中的 python 示例使用乙個會話 session 來 啟**, 並呼叫 session.run() 方法執行操作.
為了便於使用諸如 ipython 之類的 python 互動環境, 可以使用 interactivesession 代替 session 類, 使用tensor.eval() 和 operation.run() 方法代替
session.run(). 這樣可以避免使用乙個變數來持有會話.
**中 assign() 操作是圖所描繪的表示式的一部分, 正如 add() 操作一樣. 所以在呼叫 run() 執行表示式之前, 它並不會真正執行賦值操作.
通常會將乙個統計模型中的引數表示為一組變數. 例如, 你可以將乙個神經網路的權重作為某個變數儲存在乙個 tensor 中. 在訓練過程中, 通過重複執行訓練圖, 更新這個 tensor.
為了取回操作的輸出內容, 可以在使用 session 物件的 run() 呼叫 執行圖時, 傳入一些 tensor, 這些 tensor 會幫助你取回結果. 在之前的例子裡, 我們只取回了單個節點 state, 但是你也可以取回多個 tensor:
需要獲取的多個 tensor 值,在 op 的一次執行中一起獲得(而不是逐個去獲取 tensor)。
上述示例在計算圖中引入了 tensor, 以常量或變數的形式儲存. tensorflow 還提供了 feed 機制, 該機制 可以臨時替代圖中的任意操作中的 tensor 可以對圖中任何操作提交補丁, 直接插入乙個 tensor.
feed 使用乙個 tensor 值臨時替換乙個操作的輸出結果. 你可以提供 feed 資料作為
run()
呼叫的引數. feed 只在呼叫它的方法內有效, 方法結束, feed 就會消失. 最常見的用例是將某些特殊的操作指定為 "feed" 操作, 標記的方法是使用 tf.placeholder() 為這些操作建立佔位符.
end碧茂課堂精彩課程推薦:
1.cloudera資料分析課;
2.spark和hadoop開發員培訓;
3.大資料機器學習之推薦系統;
4.python資料分析與機器學習實戰;
現在註冊互動得海量學幣,大量精品課程免費送!
深度學習框架
近一年來,深度學習的風起雲湧,產生了許多令人興奮的成果,同時,深度學習框架也是百家爭鳴。經過這一年的觀察,tensorflow 似乎成為了一種潮流,並且越來越多的框架開始為 keras 提供支援,它可能會成為一種標準。今後選擇keras框架作為深度學習的目標。keras 被認為是構建神經網路的未來,...
深度學習初探(二)深度學習框架
theano 是最早的深度學習框架之一,是乙個基於 python 語言 定位底層運算的計算庫,theano 同時支援 gpu 和 cpu 運 算。由於theano 開發效率較低,模型編譯時間較長,同時開發人員轉投tensorflow 等原因,theano 目前已經停止維護 scikit learn ...
TensorFlow深度學習框架
tensorflow支援python和c 兩種程式語言,再複雜的多層神經網路模型都可以用python來實現,如果業務使用其他程式設計也不用擔心,使用跨語言的grpc或者http服務也可以訪問使用tensorflow訓練好的智慧型模型。tensorflow 是乙個採用資料流圖 data flow gr...