使用TensorFlow,您必須了解TensorFlow:
用圖來表示計算任務。
該圖在稱為會話的上下文中執行。
用張量來表示數據。
狀態由變量維護。
Feed和fetch可用於為任意操作賦值或從中獲取數據。
總結
TensorFlow是壹個編程系統,它使用圖形來表示計算任務。圖中的節點稱為OP。
(操作的縮寫)。壹個op獲得0個或多個張量,執行計算,
生成0個或多個張量。每個張量都是壹個類型化的多維數組。
例如,您可以將壹小組圖像表示為四維浮點數組。
這四個維度是【批次、高度、寬度、渠道】。
張量流圖描述了計算過程。為了進行計算,必須在進程中啟動圖表。
會話將圖得操作分配給CPU或GPU等設備,並提供執行操作得方法.
執行這些方法後,返回生成的張量。在Python語言中,返回的張量是
Numpy ndarray對象;在C和C++語言中,返回的張量是
張量流::tensorinstance。
計算圖
TensorFlow程序通常分為構建階段和執行階段。在構建階段,op的執行步驟
被描述為壹個圖表。在執行階段,會話用於執行執行圖中的op。
例如,通常在構造階段創建壹個圖來表示和訓練神經網絡,然後在執行階段重復執行圖中的訓練op。
TensorFlow支持C、c++和Python編程語言。目前TensorFlow的Python庫比較好用。
它提供了大量的輔助函數來簡化構建圖的工作,這些功能是C和C++庫所不支持的。
三種語言的會話庫是壹致的。
建築圖
構建圖的第壹步是創建壹個源op(源op)。源op不需要任何輸入,例如常數。源op的輸出被傳遞給其他op進行操作。
在Python庫中,op構造函數的返回值代表構造的op的輸出,這些返回值可以傳遞給其他人。
Op構造函數作為輸入。
TensorFlow Python庫有壹個默認圖形,OP構造函數可以為其添加節點。這個默認的圖形對
很多節目就夠了。閱讀Graph類文檔。
了解如何管理多個圖表。
將張量流作為tf導入
#創建壹個常數op來生成壹個1x2的矩陣。此操作被視為壹個節點。
#添加到默認圖表。
#
#構造函數的返回值表示常量op的返回值。
matrix1 = tf.constant([[3。, 3.]])
#創建另壹個常數op以生成2x1矩陣。
matrix2 = tf.constant([[2。],[2.]])
#創建壹個以“matrix1”和“matrix2”作為輸入的矩陣乘法運算。
#返回值“乘積”表示矩陣乘法的結果。
product = TF . mat mul(matrix 1,matrix2)
默認圖現在有三個節點,兩個constant() op和壹個matmul() op,以便真正執行矩陣乘法並得到矩陣乘法。
因此,您必須在進程中啟動此圖表。
在會話中啟動圖表。
該圖只能在構建階段完成後開始。啟動圖的第壹步是創建壹個會話對象。如果沒有創建參數,
會話構造函數將啟動默認的圖。
要獲得完整的會話API,請閱讀Session類。
#啟動默認圖表。
sess = tf。會話()
#調用sess的' run()'方法執行矩陣乘法op,傳入' product '作為該方法的參數。
#如上所述,‘product’代表矩陣乘法op的輸出,它被傳入以顯示我們想要檢索它的方法。
#矩陣乘法運算的輸出.
#
#整個執行過程是自動化的,會話負責傳遞op所需的所有輸入,OP通常是並發執行的。
#
#函數調用“run(product)”觸發了圖中三個運算(兩個常數運算和壹個矩陣乘法運算)的執行。
#
#返回值“result”是壹個numpy“ndarray”對象。
結果= sess.run(產品)
打印結果
# = = & gt[[ 12.]]
#任務完成,關閉會話。
sess.close()
會話對象需要在使用後關閉以釋放資源。除了顯式調用close,還可以使用“with”代碼塊。
自動完成關閉動作。
用tf。會話()作為會話:
結果= sess . run([產品])
打印結果
在實現中,TensorFlow將圖形定義轉化為分布式操作,以充分利用可用的計算資源(如CPU)
或者GPU)。壹般不需要明確指定使用CPU還是GPU,TensorFlow可以自動檢測。如果檢測到GPU,TensorFlow
將嘗試使用找到的第壹個GPU來執行操作。
如果機器上有多個可用的GPU,默認情況下,除了第壹個之外的其他GPU不參與計算。為了使張量流
要使用這些GPU,必須顯式地將op分配給它們來執行。隨著...設備語句來分配特定的CPU或GPU。
執行操作:
用tf。會話()作為會話:
使用tf.device("/gpu:1 "):
matrix1 = tf.constant([[3。, 3.]])
matrix2 = tf.constant([[2。],[2.]])
product = TF . mat mul(matrix 1,matrix2)
...
設備由字符串標識。當前支持的設備包括:
"/cpu:0 ":機器的cpu。
"/gpu:0 ":機器的第壹個gpu,如果有的話。
“/gpu:1”:機器的第二個gpu,以此類推。
閱讀關於使用GPU的章節,了解更多關於使用TensorFlow GPU的信息。
交互式使用
文檔中的Python示例使用會話來
啟動圖形並調用Session.run()方法來執行操作。
為了便於使用Python交互式環境,如IPython,您可以使用
交互式會話替換
會話類,使用Tensor.eval()
和Operation.run()方法。
Session.run()。這可以避免使用變量來保存會話。
#進入互動TensorFlow會話。
將張量流作為tf導入
sess = tf。交互式會話()
x = tf。變量([1.0,2.0])
a = tf .常數([3.0,3.0])
#使用初始值設定項op的run()方法初始化“x”
x.initializer.run()
#添加壹個減法子運算,從“x”中減去“a”。運行減法運算並輸出結果。
sub = TF sub(x,a)
打印子評估()
# = = & gt[-2.-1.]
張量
TensorFlow程序使用張量數據結構來表示所有數據。在計算圖中,運算之間傳遞的數據是張量。
妳可以把tensorFlow張量想象成壹個n維數組或者列表。張量包含靜態類型秩,以及。
壹個形狀。要了解TensorFlow如何處理這些概念,請參見。
等級、形狀和類型
可變的
變量以了解更多詳細信息。
變量在圖形執行期間維護狀態信息。下面的例子演示了如何使用變量來實現壹個簡單的計數器。看吧。
變量章節了解更多細節。
#創建壹個變量,並將其初始化為標量0。
狀態= tf。變量(0,name="counter ")
#創建壹個op,其作用是將狀態增加1。
one = tf.constant(1)
new_value = tf.add(state,one)
update = tf.assign(狀態,新值)
#啟動圖表後,必須首先通過` initialization ` (init) op初始化變量。
#首先,您必須將初始化操作添加到圖表中。
init _ op = TF . initialize _ all _ variables()
#啟動圖表並運行操作。
用tf。會話()作為會話:
#運行“初始化”操作
sess.run(init_op)
#打印“狀態”的初始值
打印sess.run(狀態)
#運行op,更新“狀態”並打印“狀態”
for _ in範圍(3):
sess.run(更新)
打印sess.run(狀態)
#輸出:
# 0
# 1
# 2
# 3
代碼中的assign()操作是圖中描述的表達式的壹部分,就像add()操作壹樣。所以當調用run()時
在執行表達式之前,它並不真正執行賦值操作。
通常,統計模型中的參數被表示為壹組變量。例如,您可以將神經網絡的權重作為變量存儲在張量中。
在訓練過程中,通過重復運行訓練圖來更新張量。
取得
為了檢索操作的輸出,在用Session對象的run()調用執行圖時,可以傳入壹些張量。
這些張量將幫助妳檢索結果。在前面的示例中,我們只檢索了單個節點狀態,但是您也可以檢索多個節點。
張量:
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(輸入2,輸入3)
mul = tf.mul(input1,intermed)
用tf。會話()作為會話:
result = sess.run([mul,intermed])
打印結果
#輸出:
#[數組([ 21。],dtype=float32),數組([ 7。],dtype=float32)]
需要獲得的多個張量值在op的壹次運算中壹起獲得(而不是逐個獲得張量)。
飼料
上面的例子在計算圖中引入了張量,並以常量或變量的形式存儲。TensorFlow還提供了壹種饋送機制,它
張量在圖中的任何操作都可以被暫時取代。補丁可以提交給圖中的任何操作,張量可以直接插入。
Feed臨時用張量值替換運算的輸出。您可以提供提要數據作為run()調用的參數。
提要只在調用它的方法中有效。當該方法結束時,提要將消失。最常見的用例是將壹些特殊操作指定為“feed”操作。
標記的方法是使用tf.placeholder()為這些操作創建占位符。
input 1 = TF . placeholder(TF . float 32)
input 2 = TF . placeholder(TF . float 32)
輸出= tf.mul(輸入1,輸入2)
用tf。會話()作為會話:
print sess.run([output],feed_dict={input1:[7。],輸入2:[2。]})
#輸出:
#[數組([ 14。],dtype=float32)]
查看更大規模的提要示例。
如果沒有正確提供提要,feed,placeholder()操作將生成壹個錯誤。
MNIST全連接飼料教程
(源代碼)
給出了壹個大規模使用feed的例子。