使用 tensorflow, 你必須明白 tensorflow:
賦值或者從其中獲取資料.
乙個 tensorflow 圖描述了計算的過程. 為了進行計算, 圖必須在 會話 裡被啟動. 會話 將圖的 op 分發到諸如 cpu 或 gpu 之類的 裝置 上, 同時提供執行 op 的方法. 這些方法執行後, 將產生的 tensor 返回. 在 python 語言中, 返回的 tensor 是 numpy ndarray 物件; 在 c 和 c++ 語言中, 返回的 tensor 是tensorflow::tensor 例項.
tensorflow 程式通常被組織成乙個構建階段和乙個執行階段. 在構建階段, op 的執行步驟 被描述成乙個圖. 在執行階段, 使用會話執行執行圖中的 op.
其實這就是乙個宣告式程式設計結構,就好比炒菜,我們都是把主材和佐料就準備好,才添油烹製。tensorflow的計算方式也是如此,我們先在構建階段將這個網路(如神經網路)構建出來,然後我們使用tensorflow提供的session方法開啟乙個執行(run())將我們的網路放進去run一下,就可以得到我們想到的結果。這就是宣告式的程式設計方式。
step 1: 構建圖
現在已經建立好了乙個 兩個矩陣相乘並返回product結果的圖。也就是說主材和佐料已經準備好了。接下來就是到了生火炒菜的時間了。為了得到product,我們就必須在乙個會話(session)中啟動這個乙個圖了。import tensorflow as tf
# 建立乙個常量 op, 產生乙個1x2 矩陣這個op被稱作是乙個節點
# 加到預設圖中
##構造器的返回值代表常量 op的返回值
a = tf.constant([[3., 3.]])
b = tf.constant([[2.],[2.])
# 建立乙個矩陣乘法操作, a, b作為輸入
# 返回 product 代表乘法的結果
product = tf.matmul(a,b)
step 2:啟動乙個圖
當然,在我們寫**的時候,有時候會忘記寫sess.close().這裡我們可以使用系統的帶的with來實現session的自動關閉。#接著上面的**
sess = tf.session()
# 呼叫 sess 的 'run()' 方法來執行矩陣乘法 op, 傳入 'product' 作為該方法的引數.
# 上面提到, 'product' 代表了矩陣乘法 op 的輸出, 傳入它是向方法表明, 我們希望取回
# 矩陣乘法 op 的輸出.
## 整個執行過程是自動化的, 會話負責傳遞 op 所需的全部輸入. op 通常是併發執行的.
# # 函式呼叫 'run(product)' 觸發了圖中三個 op (兩個常量 op 和乙個矩陣乘法 op) 的執行.
## 返回值 'result' 是乙個 numpy `ndarray` 物件.
sess.run(product)
print result
# ==> [[12.]]
# 任務完成後就需要關閉
sess.close()
tensorflow自從0.8版本開始支援分布式處理的機器學習,而且同時,tensorflow會充分的利用計算機資源:cpu gpu 等。而且如果檢測到gpu,會盡可能的使用gpu來實現對程式的計算。而當計算機上有多個gpu的時候,我們可以通過tf.device()來指定哪個gpu來執行。具體示例如下:with tf.session() as sess:
result = sess.run([product])
print result
裝置用字串進行標識. 目前支援的裝置包括:with tf.session() as sess:
with tf.device("/gpu:1"):
a = tf.constant([[3., 3.]]) b = tf.constant([[2.],[2.]) product = tf.matmul(a,b) ...
文件中的 python 示例使用乙個會話 session 來 啟**, 並呼叫 **session.run()**方法執行操作.
為了便於使用諸如 ipython 之類的 python 互動環境, 可以使用interactivesession 代替 session 類, 使用 tensor.eval() 和 operation.run() 方法代替 session.run(). 這樣可以避免使用乙個變數來持有會話。
在tensorflow中使用tensor資料結構來表示所有的資料。tensor可以看做是乙個n維的陣列或列表。乙個tensor包含乙個靜態型別rank和乙個shape.# 進入乙個互動式的會話
import tensorflow as tf
sess = tf.interactivesession()
x = tf.variable([1.0, 2.0]) a = tf.constant([3.0, 3.0]) # 使用初始化來初始化 variable x.initializer.run() # 增加乙個減法操作 sub op 從x 減去a,然後輸出結果 sub = tf.sub(x,a) print sub.eval() # ==> [-2 -1]
變數維護圖執行過程中的狀態資訊。下面的例子演示了如何使用變數實現乙個簡單的計數器。
為了取回操作的輸出內容, 可以在使用 session 物件的 run() 呼叫 執行圖時, 傳入一些 tensor, 這些 tensor 會幫助你取回結果. 在之前的例子裡, 我們只取回了單個節點 state, 但是你也可以取回多個 tensor:# 建立乙個變數, 初始化為標量 0
state = tf.variable(0, name="counter")
# 建立乙個operation, 其作用是使state 增加 1
one = tf.constant(1) new_value = tf.add(sate,one) update = tf.assign(state, new_value) # 啟**後, 變數必須先經過`初始化` (init) op 初始化, # 首先必須增加乙個`初始化` op 到圖中. init_op = tf.initialize_all_variables() with tf.session() as sess: sess.run(init_op) # 執行 init_op print sess.run(state) # 列印出事狀態 for _ in range(3): sess.run(update) print sess.run(state) # 輸出: # 0 # 1 # 2 # 3
上述示例在計算圖中引入了 tensor, 以常量或變數的形式儲存. tensorflow 還提供了 feed 機制, 該機制 可以臨時替代圖中的任意操作中的 tensor 可以對圖中任何操作提交補丁, 直接插入乙個 tensor.input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.mul(input1, intermed)
with tf.session():
result = sess.run([mul, intermed])
print result
# 輸出:
# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]
feed 使用乙個 tensor 值臨時替換乙個操作的輸出結果. 你可以提供 feed 資料作為 run() 呼叫的引數. feed 只在呼叫它的方法內有效, 方法結束, feed 就會消失. 最常見的用例是將某些特殊的操作指定為 "feed" 操作, 標記的方法是使用 tf.placeholder() 為這些操作建立佔位符.
如果沒有正確提供 feed, placeholder() 操作將會產生錯誤.input1 = tf.placeholder(tf.types.float32)
input2 = tf.placeholder(tf.types.float32)
output = tf.mul(input1, input2)
with tf.session() as sess:
print sess.run([output], feed_dict=) # 輸出: # [array([ 14.], dtype=float32)]
TensorFlow 深度學習筆記
google 深度學習筆記 經常總結是個好習慣,筆記目錄奉上。歡迎star,有問題可以到issue區討論 官方教程位址 最近tensorflow團隊出了乙個model專案,和這個課程無關,但是可以參考 框架 tensorflow 谷歌出品的基於python的深度學習工具集 工具 ipython,py...
TensorFlow深度學習框架
tensorflow支援python和c 兩種程式語言,再複雜的多層神經網路模型都可以用python來實現,如果業務使用其他程式設計也不用擔心,使用跨語言的grpc或者http服務也可以訪問使用tensorflow訓練好的智慧型模型。tensorflow 是乙個採用資料流圖 data flow gr...
深度學習 初識TensorFlow
深度學習使用場景 影象理解 語音識別 自然語言處理 機器自主 無人駕駛 深度學習,如深度神經網路 卷積神經網路和遞迴神經網路已被應用計算機視覺 語音識別 自然語言處理 音訊識別與生物資訊學等領域並取得了很好的效果。深度學習在人工智慧領域的地位 深度學習框架 google brain計畫產物 應用於a...