TensorFlow架構與設計:變數初始化
作者:劉光聰
原文:http://www.jianshu.com/p/bebcdfb74fb1?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-friends
是一個特殊的OP,它擁有狀態(Stateful)。本文通過闡述Variable初始化模型,深入理解變數初始化的過程。
線性模型
以一個簡單的線性模型為例(為了簡化問題,此處省略了訓練子圖)。首先,使用定義模型的輸入,然後定義了兩個全局變數,同時它們都是訓練參數,最後定義學習模型。
在使用變數之前,必須對變數進行初始化。按照習慣用法,使用將所有全局變數的初始化器匯總,並對其進行初始化。
按照既有經驗,其計算圖大致如下圖所示。
線性模型
事實上,正如下圖所示,實際的計算圖要複雜得多,讓我們從頭說起。
線性模型
初始化模型
是一個特殊的OP,它擁有狀態(Stateful)。如果從實現技術探究,的Kernel實現直接持有一個實例,其生命周期與變數一致。相對於普通的Tensor實例,其生命周期僅對本次迭代(Step)有效;而Variable對多個迭代都有效,甚至可以存儲到文件系統,或從文件系統中恢復。
此外,存在幾個操作Variable的特殊OP,例如Assign, AssignAdd等。變數所持有的Tensor以引用的方式輸入到Assign中,Assign根據初始值,就地修改Tensor內部的值,最後以引用的方式輸出該Tensor。
一般地,在使用變數之前,必須對變數進行初始化。事實上,TensorFlow設計了一個精巧的變數初始化模型。Variable根據初始值(Initial Value)進行類型推演,並確定Tensor的形狀(Shape)。另外,通過初始化器(Initializer)在初始化期間,將初始化值賦予Variable內部所持有Tensor,完成Variable的就地修改。
例如,變數的定義如下。常稱為初始值,它通過初始化器Assign,將W內部持有的Tensor以引用的形式就地修改為該初始值。
如果要讀取變數的值,則通過恆等變化,直接輸出變數所持有的Tensor。但時,去除了Variable的引用標識,同時也避免了內存拷貝。
變數初始化模型
初始化過程
然後,通過調用將變數的所有初始化器進行匯總,然後啟動Session運行該OP。
事實上,搜集所有全局變數的初始化器的OP是一個,即不存在輸入,也不存在輸出。所有變數的初始化器通過控制依賴邊與該NoOp相連,保證所有的全局變數被初始化。
初始化過程
同位關係
同位關係是一種特殊的設備約束關係。顯而易見,這兩個OP與關係極其緊密,分別實現了變數的修改與讀取功能。因此,它們必須與在同一個設備上執行。
這樣的關係,常稱為同位關係(Colocation)。可以在節點上指定屬性值:,它表示這兩個OP與放在同一個設備上運行。
例如,以節點為例,該節點增加了屬性,指示與的同位關係。
初始化依賴
如果一個變數初始化需要依賴於另外一個變數的初始值,則需要特殊地處理。例如,變數的初始值依賴於的初始值,可以通過指定。
事實上,兩者通過銜接,並顯式地添加了依賴控制邊,保證在之前初始化。此處,存在兩個的OP,但職責不一樣,它們分別完成初始化依賴和變數讀取。
初始化依賴
同樣地,可以通過調用將變數的所有初始化器進行匯總,然後啟動Session完成所有變數的初始化。
按照依賴關係,因為增加了與之間的控制依賴邊,從而巧妙地實現了在之前完成初始化,並通過當前的初始化值,最終完成的初始化。
初始化過程


TAG:人工智慧頭條 |
※Python和Scala的定義變數
※linux-shell編程中awk變數的使用
※python基礎之變數類型number(math模塊)
※「Python」Chapter1 變數和簡單數據類型
※Shell 變數
※TensorFlow中常量與變數的基本操作演示
※VBScript 變數
※Perl 變數
※Flipkart-Walmart交易:軟銀最終會有變數嗎
※Linux 設置環境變數和Mongodb設置賬號密碼
※關於如何使用webpack命令行傳入變數,並通過process.env來調用
※python基礎之變數與運算符
※微軟摺疊屏專利現身,Surface Phone或有變數
※全新斯巴魯Levorg問世有變數 EyeSight成拖累主因
※The Daily Beast:美朝峰會出現變數,特朗普怪罪中國
※「學習筆記」Python dir()函數和 __doc__ 變數的使用
※static 成員變數、static 成員函數、類/對象的大小
※Python數據類型、運算符、變數
※Perl 特殊變數
※非靜態內部類中 static/final 成員變數相關的一道趣題