iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 15
0

在 tensorflow 中,我們知道要先建立好 tensor 和 operation 後,再透過 session 來執行,而在 training 時,若有使用了像 batch normalization 這類的運算時,我們在更新權重時就有順序的考量,如果你非常希望某 operation 執行前,你一定要先執行另一個 operation 時,你就可以考慮使用 control_dependencies 來達成目的。

要使用 control_dependencies 的語法很簡單,如下。

with tf.control_dependencies(<要先被執行的op>):
   <之後再執行的op>

這邊用一個範例來解釋。

v = tf.get_variable(name="variable", shape=(), initializer=tf.constant_initializer(0))
add_op = tf.assign_add(v, 3)

with tf.control_dependencies([add_op]):
   mul_op = tf.multiply(v, 10)

with tf.Session() as sess:
   sess.run(tf.global_variables_initializer())
   sess.run(tf.local_variables_initializer())

   result = sess.run(mul_op)
   print(result)

我們先創建一個 variable 起始值為0,然後定一個 op 對 variable 加3,再使用 control_dependencies 設定 mul_op 依賴於 add_op,意思等同要執行 mul_op 之前,必須先執行 add_op ,其印出結果:
https://ithelp.ithome.com.tw/upload/images/20190923/20107299gi1bJD3K4f.png

沒錯,我們就得到 30 這個數字,(0+3)* 10 = 30。

而當我們用 tensorboard 的圖表來判讀時,可以看到 Mul 節點有個來自 AssignAdd 的虛線箭頭,這就是control_dependencies 所產生的結果,而橘色箭頭是他引用的值,意義類似 call by reference 會對箭頭來源的值做變動!
https://ithelp.ithome.com.tw/upload/images/20190923/20107299hFzmUkMpMJ.png

今天的內容雖然簡單但是卻非常重要喔,後面會再多加介紹如何結合 control_dependencies 來更新 batch normalization。

github原始碼


上一篇
【14】tensorflow 資料集應用:利用 TFRecordDataset 達成 Data Augmentation 篇
下一篇
【16】tensorflow 訓練技巧:用 piecewise_constant 達成可變動 learning rate 篇
系列文
How to Train Your Model 訓模高手:我的 Tensorflow 個人使用經驗系列文31

尚未有邦友留言

立即登入留言