會話--tensorflow執行模型
一、tensorflow系統結構的概述
從圖中可以看出tensorflow的整個系統在結構上大體可以分為兩個子系統—前端系統和後端系統。其中前端系統提供程式設計模型,負責構造計算圖;後端系統提供執行時環境,負責執行計算圖。
我們重點關注系統中client、distributed master、work services和kernel implements4個元件,它們構成了系統執行的核心。
(1)client:顧名思義,指的是客戶端。作為前端系統的主要組成部分,它是乙個支援多語言(目前,tensorflow主要支援python和c++程式語言,並對其他程式語言介面的支援日益完善)的程式設計環境。通過client,我們可以構造或簡單或複雜的計算圖,實現各種形式的執行過程。
客戶端會以session(會話)為介面與後端系統distributed runtime中的master及多個worker相連,並啟動計算圖的執行過程。
(2)distributed master:這是乙個分布式控制器(也就是與session相連的master),用於在分布式執行的環境中對乙個大的計算圖進行拆分。它會根據session.run()函式的fetches引數,從計算圖中反向遍歷,找到計算圖的「子圖」之後會將該「子圖」再次拆分成多個「子段」,這在一定程度上方便了計算圖在不同程序和裝置中的執行。最後,master將這些「子段」傳遞給work service,由work service啟動「子段」的執行程序。
(3)work service:也就是與session相連的worker,每個worker可以與device layer中的多個硬體裝置相連。對於master傳遞過來的「子段」,worker都會按照計算圖中節點之間的依賴關係及當前的device(gpu/cpu),呼叫op的kernel實現(運算的底層實現)完成op的運算。在一些情況下,work service還要將op運算結果傳送到其他的work service,或者接受其他worker service傳送過來的op運算結果。
(4)kernel implements:這是運算的底層實現介面,是op在某種硬體裝置上的底層實現。
tensorflow有單機模式和分布式模式兩種實現(單機模式下只有乙個worker,分布式下會有多個worker),其中單機模式指client、master和worker全部在一台機器上,分布式模式則會根據實際情況將client、master和worker放在不同的機器中。
會話是tensorflow程式的執行模型,它管理著程式執行時的所有資源。在所有的計算完成之後,通常需要關閉會話以幫助系統**資源;如果不這樣做,很有可能會導致資源洩露的問題。
二、簡單使用會話
session就是使用者使用tensorflow時的互動式介面,它被實現為session類。session類提供了run()方法來執行計算圖。使用者給run()函式傳入需要計算的節點,同時提供輸入的資料,tensorflow就會自動尋找所有需要計算的節點並按依賴順序執行它們。session類還提供了extend()方法為計算圖新增新的節點和邊,用以完善計算圖。在大多數情況下,我們只會建立一次計算圖,然後反覆執行整個計算圖或是其中的一部分子圖(subgraph)。
使用會話的方式一般有兩種,第一種方式(也是標準方式)就是明確呼叫會話生成函式和會話關閉函式—通過session類的session()建構函式建立會話類例項,最後通過session類的close()函式關閉會話釋放資源。
例如:
import tensorflow as tf
sess = tf.session()#用session類的建構函式建立乙個會話
#session類建構函式原型__int__(self, target, graph, config)
sess.run(...)#run()函式會執行乙個會話,一般傳入需要在會話內執行的計算過程
#函式原型run(self, fetches, feed_dict, options, run_matedata)
sess.close()#最後關閉會話,這樣可以使得本次執行中使用到的資源被釋放
#
初始化session類可以給建構函式傳入一些引數,這不屬於目前的內容。就像之前的例子中,我們定義了兩個向量a和b,並將這兩個向量進行相加,而會話的執行就是使用了上面的這種方式:
sess = tf.session()
sess.run(result)
這是標準的方式,但通過這種方式執行會話時,必須明確呼叫session.close()函式來關閉會話,同時釋放資源。然而,當程式因為異常而推退出時,關閉會話的函式可能就不會被執行,從而導致資源洩露。當神經網路過於龐大或者參數量過多時,資源洩露通常是一件比較麻煩的事。
會話的第二種使用方式就是在定義時加入with/as。
tensorflow 基礎學習十 RNN
rnn網路的結構 上圖展示了乙個簡單的迴圈神經網路結構,在這個迴圈體中僅使用了乙個類似全連線的神經網路結構。迴圈神經網路中的狀態是通過乙個向量來表示的,這個向量的維度稱為迴圈神經網路隱藏層的大小,設其為h。從上圖可以看出,迴圈體中的神經網路的輸入包含兩部分,一分部為上一時刻的狀態,另一部分為當前時刻...
Tensorflow 基礎概念
g v,e v operation 圖的節點 e tensor 圖的邊 g graph 圖 tensorflow tensor 多維陣列 flow graph 圖 op session回話上下文管理 variable tensor 多維資料變數 placeholder 外部傳入的引數變數 seesi...
tensorflow語法基礎
變數型別 variable 變數 constant 常量 指定引數 name 變數在tensorflow中的名字 dtype 變數的資料型別 可以是tf.float32,tf.int32之類的 e.g.import tensorflow as tf a tf.variable 0,dtype int...