tensorflow學(xué)習(xí)筆記-會(huì)話機(jī)制(session)

在TensorFlow中涡拘,有兩種用于運(yùn)行計(jì)算圖(graph)的會(huì)話(session)

  • tf.Session( )

  • tf.InteractivesSession( )

1. tf.Session( )

要使用tf赁咙,我們必須先構(gòu)建(定義)graph净嘀,之后才能運(yùn)行g(shù)raph甲馋。

1.1 非交互式會(huì)話中的例子

import tensorflow as tf

# 構(gòu)建graph
a = tf.add(3, 5) 

# 運(yùn)行g(shù)raph
sess = tf.Session()  # 創(chuàng)建tf.Session的一個(gè)對(duì)象sess
print(sess.run(a)) 

sess.close()         # 關(guān)閉sess對(duì)象

一個(gè)session可能會(huì)占用一些資源闲孤,比如變量搏色、隊(duì)列和讀取器(reader)夺英。我們使用sess.close()關(guān)閉會(huì)話或者使用上下文管理器釋放這些不再使用的資源缭召。

1.2 建議的tf.Session( )寫(xiě)法

import tensorflow as tf  

# 構(gòu)建graph
matrix1 = tf.constant([[3., 3.]])  
matrix2 = tf.constant([[2.], [2.]])  

product = tf.matmul(matrix1, matrix2)  

# 運(yùn)行g(shù)raph
with tf.Session() as sess:          # 使用"with"語(yǔ)句,自動(dòng)關(guān)閉會(huì)話
    print(sess.run(product))  

1.3 Fetch(取回)

在使用sess.run( )運(yùn)行圖時(shí)盒粮,我們可以傳入fetches鸵鸥,用于取回某些操作或tensor的輸出內(nèi)容。fetches可以是list丹皱,tuple妒穴,namedtuple,dict中的任意一個(gè)摊崭。fetches可以是一個(gè)列表讼油,在op的一次運(yùn)行中一起獲得(而不是逐個(gè)去獲取 tensor)多個(gè)tensor值。

import tensoflow as tf
from collections import namedtuple

a = tf.constant([10, 20])
b = tf.constant([1.0, 2.0])
MyData = namedtuple('MyData', ['a', 'b'])

with tf.Session() as sess:
    c = sess.run(a)            # fetches可以為單個(gè)數(shù)a
    d = sess.run([a, b])       # fetches可以為一個(gè)列表[a, b]
    v = sess.run({'k1': MyData(a, b), 'k2': [b, a]}) 

    print(c)
    print(d)
    print(d[0])
    print(v) 
'''
v is a dict and v['k1'] is a MyData namedtuple with the numpy array [10, 20] and the numpy array [1.0, 2.0]. v['k2'] is a list with the numpy array [1.0, 2.0] and the numpy array [10, 20].
'''

1.4 Feed(注入)

TensorFlow提供了feed注入機(jī)制, 它可以臨時(shí)替代graph中任意op操作的輸入tensor爽室,可以對(duì)graph中任何操作提交補(bǔ)吨稀(直接插入一個(gè)tensor)。

feed機(jī)制只在調(diào)用它的方法內(nèi)有效阔墩,方法結(jié)束嘿架,feed就會(huì)消失。最常見(jiàn)的用例是把某些特殊操作為feed注入的對(duì)象啸箫。你可以提供數(shù)據(jù)feed_dict耸彪,作為sess.run( )調(diào)用的參數(shù)。使用tf.placeholder( )忘苛,為某些操作的輸入創(chuàng)建占位符蝉娜。

import tensorflow as tf
import numpy as np

x = np.ones((2, 3))
y = np.ones((3, 2)) 

input1 = tf.placeholder(tf.int32)
input2 = tf.placeholder(tf.int32)

output = tf.matmul(input1, input2)

with tf.Session() as sess:
    print(sess.run(output, feed_dict = {input1:x, input2:y}))

如果沒(méi)有正確提供tf.placeholder( )唱较,feed操作將產(chǎn)生錯(cuò)誤。注意召川,feed注入的值不能是tf的tensor對(duì)象南缓,應(yīng)該是Python常量、字符串荧呐、列表汉形、numpy ndarrays,或者TensorHandles倍阐。

1.5 分布式訓(xùn)練

從version 0.8之后概疆,TensorFlow開(kāi)始支持分布式計(jì)算的機(jī)器學(xué)習(xí),而且TensorFlow會(huì)充分利用CPU峰搪、GPU等計(jì)算資源岔冀。如果檢測(cè)到GPU,TensorFlow會(huì)優(yōu)先使用GPU運(yùn)行程序概耻。用字符串標(biāo)識(shí)設(shè)備使套,目前支持的設(shè)備包括:

“/cpu:0”:機(jī)器的第一個(gè)CPU。

“/gpu:0”:機(jī)器的第一個(gè)GPU, 如果有的話

“/gpu:1”:機(jī)器的第二個(gè)GPU, 以此類推

當(dāng)計(jì)算機(jī)有多個(gè)GPU時(shí)鞠柄,通過(guò)tf.device( )童漩,我們可以指定用哪個(gè)GPU來(lái)執(zhí)行。代碼示例如下:

# 在with tf.device()下春锋,構(gòu)建graph
with tf.device("/gpu:0"):
    a = tf.constant([[3., 3.]])
    b = tf.constant([[2.], [2.]])
    product = tf.matmul(a, b)

# 運(yùn)行g(shù)raph
with tf.Session() as sess:    
    print(sess.run(product))

2. tf.InteractivesSession( )

當(dāng)python編輯環(huán)境是shell、IPython等交互式環(huán)境時(shí)差凹,我們使用類tf.InteractiveSession代替類tf.Session期奔,用方法tensor.eval( ),operation.run( ) 代替sess.run( )危尿,這樣可避免用一個(gè)變量sess來(lái)持有會(huì)話呐萌。其中更多地使用 tensor.eval(),所有的表達(dá)式都可以看作是tensor谊娇。

// 進(jìn)入python3交互式環(huán)境
# python3

>>> import tensorflow as tf  

// 進(jìn)入一個(gè)交互式會(huì)話
>>> sess = tf.InteractiveSession()

>>> a = tf.constant(5.0)
>>> b = tf.constant(6.0)
>>> c = a * b

// We can just use 'c.eval()' without passing 'sess'
>>> print(c.eval()) 

>>> sess.close()   // 關(guān)閉交互式會(huì)話

>>> exit()        // 退出python3交互式環(huán)境
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肺孤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子济欢,更是在濱河造成了極大的恐慌赠堵,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件法褥,死亡現(xiàn)場(chǎng)離奇詭異茫叭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)半等,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)揍愁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呐萨,“玉大人,你說(shuō)我怎么就攤上這事莽囤∶粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵朽缎,是天一觀的道長(zhǎng)惨远。 經(jīng)常有香客問(wèn)我,道長(zhǎng)饵沧,這世上最難降的妖魔是什么锨络? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮狼牺,結(jié)果婚禮上羡儿,老公的妹妹穿的比我還像新娘。我一直安慰自己是钥,他們只是感情好掠归,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著悄泥,像睡著了一般虏冻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弹囚,一...
    開(kāi)封第一講書(shū)人閱讀 50,084評(píng)論 1 291
  • 那天厨相,我揣著相機(jī)與錄音,去河邊找鬼鸥鹉。 笑死蛮穿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的毁渗。 我是一名探鬼主播践磅,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼灸异!你這毒婦竟也來(lái)了府适?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肺樟,失蹤者是張志新(化名)和其女友劉穎檐春,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體儡嘶,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡喇聊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蹦狂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片誓篱。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡朋贬,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窜骄,到底是詐尸還是另有隱情锦募,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布邻遏,位于F島的核電站糠亩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏准验。R本人自食惡果不足惜赎线,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糊饱。 院中可真熱鬧垂寥,春花似錦、人聲如沸另锋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)夭坪。三九已至文判,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間室梅,已是汗流浹背戏仓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亡鼠,地道東北人柜去。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像拆宛,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子讼撒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容