TensorFlow** 是一個(gè)用于數(shù)值計(jì)算的Python 庫(kù), 可以描述一幅數(shù)據(jù)計(jì)算的數(shù)據(jù)流圖(data flow graph)。
TensorFlow 最初由Google大腦小組(隸屬于Google機(jī)器智能研究機(jī)構(gòu))的研究員和工程師們開(kāi)發(fā)出來(lái)淋样,用于機(jī)器學(xué)習(xí)和深度神經(jīng)網(wǎng)絡(luò)方面的研究,但這個(gè)系統(tǒng)的通用性使其也可廣泛用于其他計(jì)算領(lǐng)域胁住。
數(shù)據(jù)流圖如下趁猴,來(lái)自TensorFlow中文社區(qū)
會(huì)話 (Session):TensorFlow描述的計(jì)算流程圖需要在Session中啟動(dòng);Session將其與C++后端連接彪见,為其分配計(jì)算設(shè)備(CPU 或 GPU)和提供計(jì)算方法儡司,反復(fù)訓(xùn)練模型。
節(jié)點(diǎn)(Nodes):在圖中表示數(shù)學(xué)操作余指,例如枫慷,數(shù)據(jù)輸入(feed in)的起點(diǎn)或輸出(push out)的終點(diǎn);
線(edges):線輸送節(jié)點(diǎn)間相互聯(lián)系和不斷變化的多維數(shù)據(jù)數(shù)組(即張量, tensor)浪规。
TensorFlow 程序
TensorFlow 程序分為計(jì)算圖構(gòu)建和執(zhí)行兩個(gè)步驟或听;
計(jì)算圖構(gòu)建:除了起始和終止層外,每個(gè)操作的輸入都是其它操作輸出笋婿,操作的輸出也是其它操作的輸入誉裆。計(jì)算圖構(gòu)建就是將數(shù)據(jù)計(jì)算內(nèi)容和過(guò)程用一個(gè)數(shù)據(jù)流圖表示出來(lái)。
計(jì)算圖執(zhí)行:計(jì)算圖構(gòu)建之后缸濒,需要?jiǎng)?chuàng)建一個(gè)會(huì)話足丢,然后才能啟動(dòng)圖;當(dāng)會(huì)話沒(méi)有參數(shù)時(shí)庇配,會(huì)話會(huì)啟動(dòng)默認(rèn)圖斩跌。
# 啟動(dòng)默認(rèn)圖.
sess = tf.Session()
#Run執(zhí)行args中的數(shù)據(jù)傳入,計(jì)算捞慌,以及獲取最終的輸出耀鸦。
result = sess.run(args)
# 任務(wù)完成, 關(guān)閉會(huì)話,釋放資源。
sess.close()
#”with" 代碼塊 來(lái)自動(dòng)完成關(guān)閉動(dòng)作.
with tf.Session() as sess:
result = sess.run(args)
print result
TensorFlow與GPU袖订、CPU
默認(rèn)情況下氮帐,TensorFlow會(huì)利用找到的第一個(gè)GPU進(jìn)行運(yùn)行運(yùn)算,但是可以適用with...Device 來(lái)選定運(yùn)算使用的CPU 或 GPU :
with tf.device("/gpu:1"):
- "/cpu:0": 機(jī)器的 CPU.
- "/gpu:0": 機(jī)器的第一個(gè) GPU洛姑。
- "/gpu:1": 機(jī)器的第二個(gè) GPU上沐。
交互式使用
在交互式操作中,使用一個(gè)會(huì)話啟動(dòng)圖并不是很方便楞艾;因此可以使用 InteractiveSession 代替 Session 類和 Tensor.eval() 和 Operation.run() 方法代替 Session.run()参咙;這樣就不會(huì)把計(jì)算就分放到不同的會(huì)話中來(lái)。
# 進(jìn)入一個(gè)交互式 TensorFlow 會(huì)話.
import tensorflow as tf
sess = tf.InteractiveSession()
x = tf.Variable([1.0, 2.0])
a = tf.constant([3.0, 3.0])
# 使用初始化器 initializer op 的 run() 方法初始化 'x'
x.initializer.run()
# 增加一個(gè)減法 sub op, 從 'x' 減去 'a'. 運(yùn)行減法 op, 輸出結(jié)果
sub = tf.sub(x, a)
print sub.eval()
# ==> [-2. -1.]
張量
在TensorFlow計(jì)算圖中硫眯,線運(yùn)輸?shù)臄?shù)據(jù)會(huì)不斷被操作和變化昂勒;tensor 可以看作是一個(gè) n 維的數(shù)組或列表. 一個(gè) tensor 包含一個(gè)靜態(tài)類型 rank和 一個(gè) shape.
變量
變量維護(hù)圖執(zhí)行過(guò)程中的狀態(tài)信息.
啟動(dòng)圖后, 變量必須要初始化,
#將所有變量都進(jìn)行初始化
init_op = tf.initialize_all_variables()
Fetch
會(huì)話執(zhí)行(Session.run)計(jì)算圖時(shí),可以將tensor的數(shù)據(jù)輸出舟铜。
result = sess.run(tensor_args)
Feed
在計(jì)算圖中引入tesor替代操作的輸出戈盈。
學(xué)習(xí)資料來(lái)源: