Tensorflow官方文档中文版——第一章
第一示例:
import tensorflow as tf import numpy as npx_data=np.float32(np.random.rand(2,100))#隨機(jī)輸入 y_data=np.dot([0.1,0.2],x_data)+0.3#點乘b=tf.Variable(tf.zeros([1])) W=tf.Variable(tf.random_uniform([1,2],-1,1))#-1到1之間的均勻分布中取出值構(gòu)成[1*2]的矩陣 y=tf.matmul(W,x_data)+b#矩陣計算 loss=tf.reduce_mean(tf.square(y-y_data))#計算平均損失函數(shù) optimizer=tf.train.GradientDescentOptimizer(0.5)#梯度下降優(yōu)化 train=optimizer.minimize(loss)#train 使loss最小化 init=tf.initialize_all_variables()#初始化所有變量 sess=tf.Session()## 啟動圖 (graph) sess.run(init) # 擬合平面 for step in range(0,201):sess.run(train)if (step %20==0):print (step,sess.run(W),sess.run(b))下載安裝
略
基本使用
圖(graph):表示計算任務(wù)
會話(Session):用于執(zhí)行圖
張量(tensor):用于表示數(shù)據(jù)
變量(variable):用于維護(hù)狀態(tài)
feed和fetch:可以為任意操作賦值或從中獲取數(shù)據(jù)
TensorFlow 是一個編程系統(tǒng),使用圖來表示計算任務(wù)。圖中的節(jié)點被稱之為op(operation的縮寫)。一個op獲得0個或多個Tensor,執(zhí)行計算,產(chǎn)生0個或多個Tensor.每個 Tensor 是一個類型化的多維數(shù)組. 例如, 你可以將一小組圖像集表示為一個四維浮點數(shù)數(shù)組, 這四個維度分別是[batch, height, width, channels] .
一個 TensorFlow 圖描述了計算的過程. 為了進(jìn)行計算, 圖必須在會話里被啟動. 會話將圖的 op 分發(fā)到諸如 CPU 或 GPU 之類的設(shè)備上, 同時提供執(zhí)行 op 的方法. 這些方法執(zhí)行后, 將產(chǎn)生的 tensor 返回. 在 Python 語言中, 返回的 tensor 是numpy ndarray 對象; 在 C 和 C++ 語言中, 返回的 tensor 是tensorflow::Tensor 實例.
TensorFlow 程序通常被組織成一個構(gòu)建階段和一個執(zhí)行階段. 在構(gòu)建階段, op 的執(zhí)行步驟 被描述成一個圖. 在執(zhí)行階段, 使用會話執(zhí)行執(zhí)行圖中的 op.
構(gòu)建圖
構(gòu)建圖的第一步, 是創(chuàng)建源 op (source op). 源 op 不需要任何輸入, 例如常量 (Constant) . 源 op 的輸出被傳遞給其它 op 做運算.Python 庫中, op 構(gòu)造器的返回值代表被構(gòu)造出的 op 的輸出, 這些返回值可以傳遞給其它 op 構(gòu)造器作為輸入.TensorFlow Python 庫有一個默認(rèn)圖 (default graph), op 構(gòu)造器可以為其增加節(jié)點. 這個默認(rèn)圖對 許多程序來說已經(jīng)足夠用了.
import tensorflow as tf #創(chuàng)建一個常量op,產(chǎn)生一個1×2矩陣,這個op被作為一個節(jié)點加到默認(rèn)圖中 #構(gòu)造器的返回值代表該常量op的返回值 matrix1=tf.constant([[3,3]]) #創(chuàng)建另外一個常量op,產(chǎn)生一個2×1矩陣 matrix2=tf.constant([[2],[2]]) #創(chuàng)建一個矩陣乘法matmul op,把‘matrix1’和‘matrix2’作為輸入 #返回‘product’代表矩陣乘法的結(jié)果 product=tf.matmul(matrix1,matrix2) #啟動默認(rèn)圖 sess=tf.Session() #調(diào)用sess的‘run()(’方法來執(zhí)行矩陣乘法op,傳入‘product’作為該方法的參數(shù) result=sess.run(product) print(result) sess.close()默認(rèn)圖現(xiàn)在有三個節(jié)點, 兩個constant() op, 和一個matmul() op.
為了真正進(jìn)行矩陣相乘運算, 并得到矩陣乘法的結(jié)果, 你必須在會話里啟動這個圖.
在一個會話中啟動圖
構(gòu)造階段完成后, 才能啟動圖. 啟動圖的第一步是創(chuàng)建一個Session 對象,如果無任何創(chuàng)建參數(shù), 會話構(gòu)造器將啟動默認(rèn)圖.
Session 對象在使用完后需要關(guān)閉以釋放資源. 除了顯式調(diào)用 close 外, 也可以使用 "with" 代碼塊 來自動完成關(guān)閉動作.
with tf.Session() as sess:result=sess.run([product])print(result)在實現(xiàn)上, TensorFlow 將圖形定義轉(zhuǎn)換成分布式執(zhí)行的操作, 以充分利用可用的計算資源(如 CPU 或 GPU). 一般你不需要顯式指定使用 CPU 還是 GPU, TensorFlow 能自動檢測. 如果檢測到 GPU, TensorFlow 會盡可能地利用找到的第一個 GPU 來執(zhí)行操作.
如果機(jī)器上有超過一個可用的 GPU, 除第一個外的其它 GPU 默認(rèn)是不參與計算的. 為了讓 TensorFlow 使用這些GPU, 你必須將 op 明確指派給它們執(zhí)行. with...Device 語句用來指派特定的 CPU 或 GPU 執(zhí)行操作:
import tensorflow as tf with tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)) as sess:with tf.device("/gpu:0"):matrix1=tf.constant([[3,3]])matrix2=tf.constant([[2],[2]])product=tf.matmul(matrix1,matrix2)result=sess.run(product)print(result)這里Session中不加入allow_soft_placement=True會出現(xiàn)說gpu沒有支持的核,原因是因為在tensorflow中,定義在圖中的op,有的只能再cup中運行,gpu中不支持。解決方法就是讓op自動識別,讓它選擇在合適的地方運行即可。如果op中有標(biāo)識的話,在運行的時候指定在cup上執(zhí)行,如果無法區(qū)分的話,可以試試在sess.run的時候加入allow_soft_placement=True。
交互式使用
文檔中的 Python 示例使用一個會話Session 來 啟動圖, 并調(diào)用Session.run() 方法執(zhí)行操作.
為了便于使用諸如IPython 之類的 Python 交互環(huán)境, 可以使用InteractiveSession 代替Session 類, 使用Tensor.eval() 和Operation.run() 方法代替Session.run() . 這樣可以避免使用一個變量來持有會話.
Tensor
TensorFlow 程序使用 tensor 數(shù)據(jù)結(jié)構(gòu)來代表所有的數(shù)據(jù), 計算圖中, 操作間傳遞的數(shù)據(jù)都是 tensor. 你可以把 TensorFlow tensor 看作是一個 n 維的數(shù)組或列表. 一個 tensor 包含一個靜態(tài)類型 rank, 和 一個 shape.
變量
Variables for more details. 變量維護(hù)圖執(zhí)行過程中的狀態(tài)信息. 下面的例子演示了如何使用變量實現(xiàn)一個簡單的計數(shù)器.
import tensorflow as tf #創(chuàng)建一個變量,初始化為標(biāo)量0 state=tf.Variable(0,name="counter") #創(chuàng)建一個op,其作用使state增加1 one=tf.constant(1) new_value=tf.add(state,one) update=tf.assign(state,new_value) # 啟動圖后, 變量必須先經(jīng)過`初始化` (init) op 初始化, # 首先必須增加一個`初始化` op 到圖中. init_op=tf.initialize_all_variables() with tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)) as sess:sess.run(init_op)print(sess.run(state))for _ in range(3):sess.run(update)print(sess.run(state))代碼中assign() 操作是圖所描繪的表達(dá)式的一部分, 正如add() 操作一樣. 所以在調(diào)用run() 執(zhí)行表達(dá)式之前, 它并不會真正執(zhí)行賦值操作.
通常會將一個統(tǒng)計模型中的參數(shù)表示為一組變量. 例如, 你可以將一個神經(jīng)網(wǎng)絡(luò)的權(quán)重作為某個變量存儲在一個tensor 中. 在訓(xùn)練過程中, 通過重復(fù)運行訓(xùn)練圖, 更新這個 tensor.
Fetch
為了取回操作的輸出內(nèi)容, 可以在使用Session 對象的run() 調(diào)用 執(zhí)行圖時, 傳入一些 tensor, 這些 tensor 會幫助你取回結(jié)果. 在之前的例子里, 我們只取回了單個節(jié)點state , 但是你也可以取回多個 tensor:
import tensorflow as tf input1=tf.constant(3) input2=tf.constant(2) input3=tf.constant(5) intermed=tf.add(input2,input3) mul=tf.multiply(input1,intermed) with tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)) as sess:result=sess.run([mul,intermed])print(result)需要獲取的多個 tensor 值,在 op 的一次運行中一起獲得(而不是逐個去獲取 tensor)。
Feed
上述示例在計算圖中引入了 tensor, 以常量或變量的形式存儲. TensorFlow 還提供了 feed 機(jī)制, 該機(jī)制可以臨時替代圖中的任意操作中的 tensor 可以對圖中任何操作提交補丁, 直接插入一個 tensor.feed 使用一個 tensor 值臨時替換一個操作的輸出結(jié)果. 你可以提供 feed 數(shù)據(jù)作為run() 調(diào)用的參數(shù). feed只在調(diào)用它的方法內(nèi)有效, 方法結(jié)束, feed 就會消失. 最常見的用例是將某些特殊的操作指定為 "feed" 操作,標(biāo)記的方法是使用 tf.placeholder() 為這些操作創(chuàng)建占位符.
import tensorflow as tf input1=tf.placeholder(tf.float32) input2=tf.placeholder(tf.float32) output=tf.multiply(input1,input2) with tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)) as sess:print(sess.run([output],feed_dict={input1:[7],input2:[2]}))for a larger-scale example of feeds. 如果沒有正確提供 feed, placeholder() 操作將會產(chǎn)生錯誤.
轉(zhuǎn)載于:https://www.cnblogs.com/yifdu25/p/8150443.html
總結(jié)
以上是生活随笔為你收集整理的Tensorflow官方文档中文版——第一章的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 增加 Eclipse color Th
- 下一篇: 添加github ssh 公钥