tensorflow使用圖來表示計算任務,圖中的節點被稱之為op(operation的縮寫),乙個op獲得n個tensor,執行計算,產生n個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++庫支援;
構建圖的第一步,是建立源op(source.op). 源op不需要任何輸入, 例如 常量(constant). 源op的輸出被傳遞給其他 op 做運算;
python 庫中, op構造器的 返回值代表被構建出的 op 的輸出, 這些返回值可以傳遞給其他 op 構造器作為輸入。
tensorflow python 庫有乙個預設圖(default graph), op 構造器可以為其增加節點, 這個預設圖 對很多 程式來說以及足夠用了:
1import
tensorflow as tf23
#構建階段開始4#
建立乙個產量op, 產生乙個 1*2 矩陣。這個 op 被作為乙個節點5#
新增到預設圖中67
#構造器的返回值代表該常量 op 的返回值
8 matrix1 = tf.constant([[3., 3.]])910
#建立另外乙個常量 op,產生乙個 2 * 1 矩陣
11 matrix2 = tf.constant([[2.], [2.]])
1213
#建立乙個矩陣乘法 matmul op, 把 matrix1 和 matrix2 作為輸入14#
返回值 'product' 代表矩陣乘法的結果
1516 product =tf.matmul(matrix1, matrix2)
1718
#預設圖現在有三個節點, 兩個constant() op,和乙個matmul() op.為了真正進行矩陣相乘運算,並得到矩陣乘法的結果,
192021#
***************==構造階段完成***************
2223
#***************==執行階段開始***************
2425
#啟動預設圖
26 sess =tf.session()
2728
#呼叫 sess 的 'run()' 方法來執行矩陣乘法 op, 傳入 'product' 作為該方法的引數.29#
'product' 代表了矩陣乘法 op 的輸出, 傳入它是向方法表明, 我們希望取回 矩陣乘法 op 的輸出.
3031
#整個執行過程是自動化的, 會話負責傳遞 op 所需的全部輸入. op 通常是併發執行的.
3233
#函式呼叫 'run(product)' 觸發了圖中三個 op (兩個常量 op 和乙個矩陣乘法 op) 的執行.
3435
#返回值 'result' 是乙個 numpy `ndarray` 物件.
3637 result =sess.run(product)
38print
result
3940
#任務完成, 關閉會話
41sess.close()
4243
'''44
with tf.session() as sess:
45result = sess.run(product)
46print result
47'''
4849
#***************==執行階段完成***************
tensorflow程式使用 tensor 資料結構來表示所有的資料, 計算圖中,操作間傳遞的資料都是 tensor。
可以把tensorflow tensor 看作乙個 n 維的陣列或列表, 乙個tensor包含乙個靜態型別 rank, 和乙個 shape。 詳細了解rank、 shape 和type
1、變數
變數維護圖執行過程中的狀態資訊, 下面示例演示了如何使用變數實現乙個簡單的計算器;
1#encoding=utf-823
import
tensorflow as tf45
#建立乙個變數,初始化為標量0
6 state = tf.variable(0, name="
counter")
78#建立乙個op,其作用是使 state 增加 1
9 one = tf.constant(1)
1011 new_value =tf.add(state, one)
1213 update =tf.assign(state, new_value)
1415
#啟**後,變數必須先經過 "初始化" (init) op初始化16#
首先必須增加乙個 "初始化" op 到圖中
17 init_op =tf.initialize_all_variables()
1819
#啟**, 執行op
20with tf.session() as sess:21#
執行 init op
22sess.run(init_op)23#
列印 'state' 的初始值
24print
sess.run(state)
25print
"*****=="26
#執行op,更新 state,並列印 state
27for _ in range(3):
28sess.run(update)
29print
sess.run(state)
3031
#**中 assign() 操作是圖所描繪的表示式的一部分, 32#
正如 add() 操作一樣. 所以在呼叫 run() 執行表示式之前, 它並不會真正執行賦值操作.
3334
#通常 需要將乙個統計模型中的引數表示為一組變數。35#
例如,將乙個神經網路的權重作為某個變數儲存在乙個 tensor 中,在訓練過程中,36#
通過重複執行訓練圖, 更新這個tensor
2、 fetch(提取)
為了取回操作的輸出內容, 可以在使用session 物件的 run() 呼叫 執行圖時,傳入一些 tensor, 這些tensor 會幫助取回結果。 在之前的例子中, 我們只取回了 單個節點 state, 但是也可以取回多個 tensor:
1#encoding=utf-823
import
tensorflow as tf
45 input1 = tf.constant(3.0)
6 input2 = tf.constant(2.0)
7 input3 = tf.constant(5.0)
89 intermed =tf.add(input2, input3)
1011 mul =tf.mul(input1, intermed)
1213
with tf.session() as sess:
14 result =sess.run([mul, intermed])
15print result
3、feed
在計算圖中引入了 tensor, 以常量或變數的形式儲存. tensorflow 還提供了 feed 機制, 該機制 可以臨時替代圖中的任意操作中的 tensor 可以對圖中任何操作提交補丁, 直接插入乙個 tensor;
feed 使用乙個 tensor 值臨時替換乙個操作的輸出結果. 你可以提供 feed 資料作為run()
呼叫的引數. feed 只在呼叫它的方法內有效, 方法結束, feed 就會消失. 最常見的用例是將某些特殊的操作指定為 "feed" 操作, 標記的方法是使用 tf.placeholder() 為這些操作建立佔位符.
1#encoding=utf-823
import
tensorflow as tf
45 input1 =tf.placeholder(tf.float32)
6 input2 =tf.placeholder(tf.float32)
7 output =tf.mul(input1, input2)89
with tf.session() as sess:
10print sess.run([output], feed_dict=)
Tensorflow基本概念理解示例
tensorflow 主要包括兩部分 構建圖模型和計算圖模型。圖模型的基本構成是節點,每個節點代表的是乙個操作 operation 或者理解成函式,每個節點都有輸入輸出,每個節點通過線條相連。例如常數節點 constant node 沒有輸入,輸出為常數 變數節點 variable node 可以更...
tensorflow中的基本概念
本文是在閱讀官方文件後的一些個人理解。nodes in the graph are called ops short for operations an op takes zero or more tensors,performs some computation,and produces zero...
深度學習筆記 tensorflow基本概念
用tensorflow這樣工具的原因是 它允許我們用計算圖 computational graphs 的方式建立網路.下面就是對計算圖的直觀講解。例如 計算圖所建立的只是乙個網路框架。在程式設計時,並不會有任何實際值出現在框架中。所有權重和偏移都是框架中的一部分,初始時至少給定初始值才能形成框架。因...