TensorFlow学习笔记(1):variable与get_variable, name_scope()和variable_scope()
生活随笔
收集整理的這篇文章主要介紹了
TensorFlow学习笔记(1):variable与get_variable, name_scope()和variable_scope()
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
Variable
tensorflow中有兩個關于variable的op,tf.Variable()與tf.get_variable()下面介紹這兩個的區(qū)別
使用tf.Variable時,如果檢測到命名沖突,系統(tǒng)會自己處理。使用tf.get_variable()時,系統(tǒng)不會處理沖突,而會報錯
import tensorflow as tfw_1 = tf.get_variable(name="w_1",initializer=1) w_2 = tf.get_variable(name="w_1",initializer=2) #錯誤信息 #ValueError: Variable w_1 already exists, disallowed. Did #you mean to set reuse=True in VarScope?
基于這兩個函數(shù)的特性,當我們需要共享變量的時候,需要使用tf.get_variable()。在其他情況下,這兩個的用法是一樣的
- tf.get_variable() 以及 tf.Variable() 是 TensorFlow 中創(chuàng)建變量的兩種主要方式;
- 如果在 tf.name_scope() 環(huán)境下分別使用 tf.get_variable() 和 tf.Variable(),兩者的主要區(qū)別在于
-
- tf.get_variable() 創(chuàng)建的變量名不受 name_scope 的影響;
- tf.get_variable() 創(chuàng)建的變量,name 屬性值不可以相同;tf.Variable() 創(chuàng)建變量時,name 屬性值允許重復(底層實現(xiàn)時,會自動引入別名機制
import tensorflow as tfwith tf.variable_scope("scope1"):w1 = tf.get_variable("w1", shape=[])w2 = tf.Variable(0.0, name="w2") with tf.variable_scope("scope1", reuse=True):w1_p = tf.get_variable("w1", shape=[])w2_p = tf.Variable(1.0, name="w2")assert w1 == w1_p assert w2 != w2_p get_variable() 函數(shù)的行為依賴于 reuse 的狀態(tài):
-
case1:reuse 設置為 False,創(chuàng)建并返回新變量:
with tf.variable_scope('foo'):v = tf.get_variable('v', [1]) assert v.name == 'foo/v:0
-
case2:reuse 設置為 True,將會按照給定的名字在以存的變量中搜尋:
with tf.variable_scope('foo'):v = tf.get_variable('v', [1]) with tf.variable_scope('foo', reuse=True):v1 = tf.get_variable('v') assert v1 == v
variable_scope()
一個雙層嵌套名稱空間: with tf.variable_scope('foo'):with tf.variable_scope('bar'):v = tf.get_variable('v', [1]) assert v.name == 'foo/bar/v:0'with tf.name_scope('foo'):with tf.variable_scope('bar'):v = tf.get_variable('v', [1]) assert v.name == 'bar/v:0'
總結
以上是生活随笔為你收集整理的TensorFlow学习笔记(1):variable与get_variable, name_scope()和variable_scope()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pp越狱助手自制固件怎么降级
- 下一篇: [深度学习]CNN--卷积神经网络中用1