當前位置:
首頁 > 最新 > TensorFlow架構與設計:變數初始化

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 成員變數相關的一道趣題