tf.Variable的参数列表为tf.Variable(name=None, initial_value, validate_shape=True, trainable=True, collections=None),返回一个由initial_value创建的变量
tf.get_variable的参数列表为tf.get_variable(name, shape=None, initializer=None, dtype=tf.float32, trainable=True, collections=None),如果已存在参数定义相同的变量,就返回已存在的变量,否则创建由参数定义的新变量。
所以tf.get_variable创建变量时,会进行变量检查,当设置为共享变量时(通过scope.reuse_variables()或tf.get_variable_scope().reuse_variables()),检查到第二个拥有相同名字的变量,就返回已创建的相同的变量;如果没有设置共享变量,则会报[ValueError: Variable varx alreadly exists, disallowed.]的错误。而tf.Variable()创建变量时,name属性值允许重复,检查到相同名字的变量时,由自动别名机制创建不同的变量。
例如:
with tf.name_scope('name_scope_1'):
var1 = tf.get_variable(name='var1', shape=[1], initializer=None, dtype=tf.float32)
var2 = tf.Variable(name='var2', initial_value=[1], dtype=tf.float32)
var21 = tf.Variable(name='var2', initial_value=[2], dtype=tf.float32)
输出name时,如下:
var1:0
name_scope_1/var2:0
name_scope_1/var2_1:0
而
with tf.name_scope('name_scope_2') as scope:
scope.reuse_variables() #tf.get_variable_scope().reuse_variables()
var1 = tf.get_variable(name='var1', shape=[1], initializer=None, dtype=tf.float32)
var11 = tf.get_variable(name='var1')
var2 = tf.Variable(name='var2', initial_value=[1], dtype=tf.float32)
var21 = tf.Variable(name='var2', initial_value=[2], dtype=tf.float32)
with tf.Session() as sess:
print(var1.name)
print(var11.name)
print(var2.name)
print(var21.name)
输出name时,如下:
var1:0
var1:0
name_scope_2/var2:0
name_scope_2/var2_1:0
tf.Variable和tf.get_variable的区别
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 文章均迁移到我的主页 http://zhenlianghe.com my github: https://gith...