1. 程式人生 > >TensorFlow入門( 一)--基本用法

TensorFlow入門( 一)--基本用法

1.    計算圖是TensorFlow中最基本的一個概念,TensorFlow中所有計算都會被轉化為計算圖上的節點。TensorFlow的名字已經說明了它最重要的兩個概念-TensorFlow。Tensor就是張量。在TensorFlow中,可以解釋為多維陣列。如果說TensorFlow的第一個詞說明了它的資料結構,那麼Flow說明了它的計算模型。Flow中文翻譯為流,直觀的表達了張量之間通過計算相互轉化的過程。TensorFlow中的每一個計算都是圖上的一個節點,而節點之間的邊描述了計算之間的依賴關係。如果一個運算的輸入依賴於另一個運算的輸出,那麼這兩個運算就有依賴關係。

2.    TensorFlow程式一般有兩個過程,第一階段需要定義計算圖中所有的計算,第二個階段為執行計算。構建圖的第一步, 是建立

op(source op) op 不需要任何輸入, 例如 常量 (Constant). 源 op 的輸出被傳遞給其它 op 做運算.

第一步:構造圖

TensorFlow有一個預設圖,op構造器可以為其增加節點。

建立一個矩陣乘法 'matmul ' op , 把 'matrix1' 和 'matrix2' 作為輸入. 返回值 'product' 代表矩陣乘法的結果.

>>> import tensorflow as tf

>>> matrix1=tf.constant([[3.,3.]]) #建立一個常量op

>>> matrix2=tf.constant([[2.],[2.]])#建立一個常量op

>>> product=tf.matmul(matrix1,matrix2)# 建立一個矩陣乘法matmul op ,把'matrix1' 和 'matrix2' 作為輸入.

# 返回值 'product' 代表矩陣乘法的結果.

第二步:執行計算

預設圖現在有三個節點, 兩個 constant() op, 和一個matmul() op. 為了真正進行矩陣相乘運算, 並得到矩陣乘法的結果, 你必須在會話裡啟動這個圖.

構造階段完成後, 才能啟動圖. 啟動圖的第一步是建立一個 Session 物件, 如果無任何建立引數, 會話構造器將啟動預設圖.

啟動預設引數 ‘sess=tf.Session(

呼叫sessrun()方法來執行矩陣乘法op'product'代表了矩陣乘法op的輸出,傳入它是向方法表明,我們希望取回矩陣乘法op的輸出。整個執行過程是自動化的,會話負責傳遞op所需的全部輸入. op通常是併發執行

.函式呼叫 'run(product)' 觸發了圖中三個 op (兩個常量op和一個矩陣乘法 op)的執行.返回值 'result'是一個 numpy `ndarray`物件.

任務完成, 關閉會話.

>>> sess=tf.Session()
>>> result=sess.run(product)
>>> print result
[[ 12.]]
>>> sess.close()

Session物件在使用完後需要關閉以釋放資源. 除了顯式呼叫 close 外, 也可以使用 "with" 程式碼塊 來自動完成關閉動作.

>>> with tf.Session() as sess:

...  result=sess.run(product)

...   print result

...

[[ 12.]]

如果機器上有超過一個可用的 GPU, 除第一個外的其它 GPU 預設是不參與計算的. 為了讓 TensorFlow 使用這些 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, 以此類推.

3.    TensorFlow四則運算

加法

x =tf.add(5, 2)  # 7

減法

x = tf.subtract(10, 4) # 6

乘法

y = tf.multiply(2, 5) # 10

除法

y = tf.div(10,5) # 2

型別轉換

當你嘗試計算兩個不同型別的值的時候會出現報錯,例如:

tf.subtract(tf.constant(2.0),tf.constant(1)) 

"""

ValueError: Tensor conversion requesteddtype float32

for Tensor with dtype int32:

"""

此時就需要使用tf.cast()轉換型別:

tf.subtract(tf.cast(tf.constant(2.0),tf.int32), tf.constant(1))  # 1

>>> sess=tf.Session()

>>> print(sess.run(y))#display

4.    在TebsorFlow中系統會自動維護一個預設的計算圖,通過tf.get_default_graph()函式可以獲取當前預設的計算圖。

以下程式碼示意瞭如何獲取預設計算圖以及檢視一個運算所屬的計算圖。

>>> print(a.graph is tf.get_default_graph())

True
5.    互動式使用

文件中的 Python 示例使用一個會話 Session 來 啟動圖, 並呼叫 Session.run() 方法執行操作.

# 進入一個互動式 TensorFlow 會話.

import tensorflow as tf

sess = tf.InteractiveSession()

x =tf.Variable([1.0, 2.0])

a =tf.constant([3.0, 3.0])

# 使用初始化器initializerop 的 run() 方法初始化 'x'

x.initializer.run()

# 增加一個減法 sub op, 從 'x' 減去 'a'. 執行減法 op, 輸出結果

sub = tf.subtract(x, a)

print sub.eval()

#==> [-2. -1.]