【tensorflow】tf.name_scope與tf.variable_scope區別

共同點

作用域函數 包括:

  • 命名域:tf.name_scope()
  • 變量域:tf.variable_scope()

對於使用 tf.Variable()方式創建的變量,具有相同的效果。即:

都會在當前變量名前面,加上“域名稱”前綴。

都可用於:

  • 變量共享
  • tensorboard畫流程圖進行可視化封裝變量

但是,tf.Variable() 每次都會新建變量。
如果希望重用(共享)一些變量,必須用到get_variable(),它會去搜索變量名,有就直接用,沒有再新建。

不同點

tf.name_scope

命名域。

tf.variable_scope

變量域。

  • 對於通過tf.get_variable()方式創建的變量,只有使用variable scope的名稱纔會加到變量名稱前面,而name scope無效。

經驗總結

  • 對於控制tf.summary、input、loss等tensor的作用域,可以直接用tf.name_scope()
  • 對於含有tf.get_variable()的作用域(常包括網絡設計、valid時網絡reuse等):
    with tf.variable_scope(tf.get_variable_scope(), reuse=True):
    	...
    
    必須用tf.variable_scope()才能給其加上前綴。

參考文獻

[1] 通俗理解tf.name_scope()、tf.variable_scope()

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章