生活随笔
收集整理的這篇文章主要介紹了
通俗理解tf.name_scope()、tf.variable_scope()
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
前言:最近做一個實(shí)驗,遇到TensorFlow變量作用域問題,對tf.name_scope()、tf.variable_scope()等進(jìn)行了較為深刻的比較,記錄相關(guān)筆記: tf.name_scope()、tf.variable_scope()是兩個作用域函數(shù),一般與兩個創(chuàng)建/調(diào)用變量的函數(shù)tf.variable() 和tf.get_variable()搭配使用。常用于: 1)變量共享;2)tensorboard畫流程圖進(jìn)行可視化封裝變量。 通俗理解就是:tf.name_scope()、tf.variable_scope()會在模型中開辟各自的空間,而其中的變量均在這個空間內(nèi)進(jìn)行管理,但是之所以有兩個,主要還是有著各自的區(qū)別。 1.name_scope 和 variable_scope: name_scope 和 variable_scope主要用于變量共享。其中,變量共享主要涉及兩個函數(shù):tf.variable() 和tf.get_variable();即就是必須要在tf.variable_scope的作用域下使用tf.get_variable()函數(shù)。這里用tf.get_variable( ) 而不用tf.Variable( ),是因為前者擁有一個變量檢查機(jī)制,會檢測已經(jīng)存在的變量是否設(shè)置為共享變量,如果已經(jīng)存在的變量沒有設(shè)置為共享變量,TensorFlow 運(yùn)行到第二個擁有相同名字的變量的時候,就會報錯。 注意,tf.variable() 和tf.get_variable()有不同的創(chuàng)建變量的方式:tf.Variable() 每次都會新建變量。如果希望重用(共享)一些變量,就需要用到了get_variable(),它會去搜索變量名,有就直接用,沒有再新建。此外,為了對不同位置或者范圍的共享進(jìn)行區(qū)分,就引入名字域。既然用到變量名了,就涉及到了名字域的概念。這就是為什么會有scope 的概念。name_scope 作用域操作,variable_scope 可以通過設(shè)置reuse 標(biāo)志以及初始化方式來影響域下的變量,因為想要達(dá)到變量共享的效果, 就要在 tf.variable_scope()的作用域下使用 tf.get_variable() 這種方式產(chǎn)生和提取變量. 不像 tf.Variable() 每次都會產(chǎn)生新的變量, tf.get_variable() 如果遇到了已經(jīng)存在名字的變量時, 它會單純的提取這個同樣名字的變量,如果不存在名字的變量再創(chuàng)建. 例如: - [/code]輸出:
- [code]
復(fù)制代碼 2.name scope和variable scope區(qū)別 TF中有兩種作用域類型:命名域?(name scope),通過tf.name_scope 或 tf.op_scope創(chuàng)建; 變量域?(variable scope),通過tf.variable_scope 或 tf.variable_op_scope創(chuàng)建; 這兩種作用域,對于使用tf.Variable()方式創(chuàng)建的變量,具有相同的效果,都會在變量名稱前面,加上域名稱。對于通過tf.get_variable()方式創(chuàng)建的變量,只有variable scope名稱會加到變量名稱前面,而name scope不會作為前綴。 舉例1: - [/code]輸出:
- [code]
復(fù)制代碼 舉例2: - [/code]輸出:
- [code]
復(fù)制代碼 總結(jié): 1、name_scope不會作為tf.get_variable變量的前綴,但是會作為tf.Variable的前綴。(舉例1) 2、在variable_scope的作用域下,tf.get_variable()和tf.Variable()都加了scope_name前綴。因此,在tf.variable_scope的作用域下,通過get_variable()可以使用已經(jīng)創(chuàng)建的變量,實(shí)現(xiàn)了變量的共享,即可以通過get_variable()在tf.variable_scope設(shè)定的作用域范圍內(nèi)進(jìn)行變量共享。(舉例2) 3、在重復(fù)使用的時候, 一定要在代碼中強(qiáng)調(diào) scope.reuse_variables()
參考鏈接: [1] scope 命名方法 - Tensorflow | 莫煩Python [2] tf.name_scope()和tf.variable_scope() - AI-FUTURE - CSDN博客 | |
總結(jié)
以上是生活随笔為你收集整理的通俗理解tf.name_scope()、tf.variable_scope()的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。