在前面的文章中,咱們已經完成了AI基礎環境的搭建(見文章:Ubuntu + Anaconda + TensorFlow + GPU + PyCharm搭建AI基礎環境),以及初步瞭解了TensorFlow的特色和基本操做(見文章:快速掌握TensorFlow(一)),接下來將繼續學習掌握TensorFlow。前端
本文主要是學習掌握TensorFlow的計算圖、會話操做。python
計算圖是TensorFlow的核心概念,使用圖(Graph)來表示計算任務,由節點和邊組成。TensorFlow由前端負責構建計算圖,後端負責執行計算圖。
爲了執行圖的計算,圖必須在會話(Session)裏面啓動,會話將圖的操做分發到CPU、GPU等設備上執行。
下面將介紹如何在TensorFlow裏面建立會話、圖以及基本操做。算法
一、圖(Graph)
TensorFlow Python庫已經有一個默認圖 (default graph),若是沒有建立新的計算圖,則默認狀況下是在這個default graph裏面建立節點和邊。
在圖裏面添加節點很是方便。例如如今要建立這樣的計算圖,兩個張量相加,以下圖:
代碼以下:後端
import tensorflow as tf a=tf.constant([1.0,2.0], name='a') b=tf.constant([3.0,4.0], name='b') result = tf.add(a,b)
如今默認圖就有了三個節點,兩個constant(),和一個add()。
爲了真正使兩個張量相加並獲得結果,就必須在會話裏面啓動這個圖。微信
二、會話(Session)
要啓動計算圖,首先要建立一個Session對象。
使用tf.Session()建立會話,調用run()函數執行計算圖。若是沒有傳入任何建立參數,會話構造器將啓動默認圖。若是要指定某個計算圖,則傳入計算圖參數(如g1),則建立會話方式爲tf.Session(graph=g1)建立會話(Session)主要有如下三種方式:
(1)建立一個會話網絡
#啓動默認圖 sess=tf.Session() result_value = sess.run(result) print(result_value) # ==> [4.0 6.0] # 任務完成, 關閉會話. sess.close()
(2) 建立一個會話
Session在使用完後須要關閉以釋放資源,除了顯式調用close外,也可使用「with」代碼塊 來自動完成關閉動做。代碼以下:分佈式
with tf.Session() as sess: result_value = sess.run(result) print(result_value) # ==> [4.0 6.0]
(3)建立一個默認的會話函數
sess=tf.Session() with sess.as_default(): result_value = result.eval() print(result_value)
當指定默認會話後,能夠經過tf.Tensor.eval函數來計算一個張量的取值。oop
(4)建立一個交互式會話
在交互式環境下(例如IPython),使用設置默認會話的方式來獲取張量的取值更加方便,TensorFlow提供了一種在交互式環境下直接構建默認會話的函數:tf.InteractiveSession,該函數會自動將生成的會話註冊爲默認會話,使用 tf.Tensor.eval()代替 Session.run(),代碼以下:學習
sess= tf.InteractiveSession() result_value = result.eval() print(result_value) sess.close()
三、構建多個計算圖
在TensorFlow中能夠構建多個計算圖,計算圖之間的張量和運算是不會共享的,經過這種方式,能夠在同個項目中構建多個網絡模型,而相互之間不會受影響。
使用tf.Graph()函數構建圖,構建多個計算圖的方式以下:
# 構建計算圖g1 g1=tf.Graph() with g1.as_default(): # 在計算圖g1中定義變量'v',並設置初始值爲0。 v=tf.get_variable('v',initializer=tf.zeros_initializer()(shape = [1])) # 構建計算圖g2 g2=tf.Graph() with g2.as_default(): # 在計算圖g2中定義變量'v',並設置初始值微1。 v=tf.get_variable('v',initializer=tf.ones_initializer()(shape = [1])) # 在計算圖g1中讀取變量'v'的取值 with tf.Session(graph=g1) as sess: tf.global_variables_initializer().run() with tf.variable_scope('',reuse=True): print(sess.run(tf.get_variable('v'))) # 輸出結果[0.] # 在計算圖g2中讀取變量'v'的取值 with tf.Session(graph=g2) as sess: tf.global_variables_initializer().run() with tf.variable_scope('',reuse=True): print(sess.run(tf.get_variable('v'))) # 輸出結果[1.]。
四、指定運行設備
若是電腦有多個GPU,能夠在圖、會話中指定要運行的設備
(1)在圖中指定運行設備
g=tf.Graph() # 指定計算運行的設備。 with g.device('/gpu:0'): result=tf.add(a,b)
(2)在會話中指定運行設備
with tf.Session() as sess: with tf.device("/gpu:0"): result=tf.add(a,b)
運行的設備用字符串進行標識,目前支持的設備包括:
經過以上介紹,已經瞭解了圖、會話的基本操做,使用圖 (graph) 來表示計算任務,使用會話 (Session) 來執行圖。
接下來,咱們將有更多講解TensorFlow的精彩內容,敬請期待!
歡迎關注本人的微信公衆號「大數據與人工智能Lab」(BigdataAILab),獲取更多信息
推薦相關閱讀