深度學習 TensorFlow 入門之基本使用

2021-07-29 10:20:10 字數 4357 閱讀 3629

使用 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: 構建圖

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)

現在已經建立好了乙個 兩個矩陣相乘並返回product結果的圖。也就是說主材和佐料已經準備好了。接下來就是到了生火炒菜的時間了。為了得到product,我們就必須在乙個會話(session)中啟動這個乙個圖了。

step 2:啟動乙個圖

#接著上面的**

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()

當然,在我們寫**的時候,有時候會忘記寫sess.close().這裡我們可以使用系統的帶的with來實現session的自動關閉。

with tf.session() as sess:

result = sess.run([product])

print result

tensorflow自從0.8版本開始支援分布式處理的機器學習,而且同時,tensorflow會充分的利用計算機資源:cpu gpu 等。而且如果檢測到gpu,會盡可能的使用gpu來實現對程式的計算。而當計算機上有多個gpu的時候,我們可以通過tf.device()來指定哪個gpu來執行。具體示例如下:

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(). 這樣可以避免使用乙個變數來持有會話。

# 進入乙個互動式的會話

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]

在tensorflow中使用tensor資料結構來表示所有的資料。tensor可以看做是乙個n維的陣列或列表。乙個tensor包含乙個靜態型別rank和乙個shape.

變數維護圖執行過程中的狀態資訊。下面的例子演示了如何使用變數實現乙個簡單的計數器。

# 建立乙個變數,  初始化為標量 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

為了取回操作的輸出內容, 可以在使用 session 物件的 run() 呼叫 執行圖時, 傳入一些 tensor, 這些 tensor 會幫助你取回結果. 在之前的例子裡, 我們只取回了單個節點 state, 但是你也可以取回多個 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)]

上述示例在計算圖中引入了 tensor, 以常量或變數的形式儲存. tensorflow 還提供了 feed 機制, 該機制 可以臨時替代圖中的任意操作中的 tensor 可以對圖中任何操作提交補丁, 直接插入乙個 tensor.

feed 使用乙個 tensor 值臨時替換乙個操作的輸出結果. 你可以提供 feed 資料作為 run() 呼叫的引數. feed 只在呼叫它的方法內有效, 方法結束, feed 就會消失. 最常見的用例是將某些特殊的操作指定為 "feed" 操作, 標記的方法是使用 tf.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)]

如果沒有正確提供 feed, placeholder() 操作將會產生錯誤.

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...