<以下是我個人經驗,可能有誤>
我們都知道tensorflow是以計算突來當作整體變數架構
"tensor再graph裡飛"
tensorflow自動會將定義的計算轉化為計算圖上的節點
計算圖使結構清晰,但也是結構複雜
因為計算圖是一種新的概念
所以剛開始接觸tensorflow時我不太會去注意graph這東西
但當我開始與夥伴寫一個系統時
整合就開始出現問題了
經常發生的變數之間互相無法感應
他們分別處於不同計算圖上
這種情況再使用keras套件與tensorflow混用也經常發生
或是使用keras套件但是想自訂loss之類
因為keras他會自動為計算圖參數定義name
而若是你想用較複雜的方式引用參數
而自訂了name後
就會發生問題
如何解決此問題呢
目前我們系統是以統一設定為初始計算圖的方式
再每個張量出現位置都以初始計算圖括起來
若是不確定是否便量處於不同計算圖上時
可用以下方是顯示其是否位於初始計算圖
通過tf.get_default_graph()函數可以獲取當前默認計算圖(也就是tensorflow自動維護之初始計算圖)
通過a.graph可以查看tensor所屬計算圖
print( a.graph is tf.get_default_graph() )
返回boolean值
tensorflow支持通過tf.Garph函數生成新計算圖
不同計算圖上之tensor和運算都不會共享
此特性可觀察以下code得到實際結果
當我們整合不同神經網路時
我們會在每份使用到tensorflow的.py檔前加入
設定config以及全域sess、graph(初始graph)
然後將tensor with起來
小tip:
summary可以印出神經網路結構
在寫論文非常好用