共同點
作用域函數 包括:
- 命名域: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()
才能給其加上前綴。