tf.Variable、tf.get_variable的区别
tf.Variable、tf.get_variable、tf.variable_scope以及tf.name_scope关系
https://www.cnblogs.com/MY0213/p/9270864.html
(其中的几个观点:
1、tf.Variable、tf.get_variable的区别
2、tf.get_variable与tf.variable_scope配合实现reuse
3、tf.get_variable函数不受tf.name_scope的影响。)
TensorFlow入门(七) 充分理解 name / variable_scope
https://blog.youkuaiyun.com/Jerr__y/article/details/70809528
TensorFlow中的name_scope和variable_scope的使用
https://blog.youkuaiyun.com/qq_27825451/article/details/82349984
这篇文章中有tf.name_scope()、 tf.variable_scope()、分别与tf.Variable() 、tf.get_variable()组合使用的四种情况。
一、概要
-
tf.name_scope() #主要是方便参数变量的“ 分组 ”和 “ 管理 ”,主要是结合tf.Variable()一起使用
1)与tf.Variable()一起使用,给变量名加一个前缀
2)与 tf.get_variable()一起使用,不会给其创建的变量带来任何影响(不会给变量加前缀) -
tf.variable_scope() #一方面也是可以实现变量的“ 分组 ”和“ 管理 ”; 另一方面在大大大部分情况下,跟 tf.get_variable() 配合使用,实现变量共享的功能
1)与tf.Variable()一起使用,给变量名加一个前缀
2)与 tf.get_variable()一起使用,也会给变量加前缀。 -
tf.Variable() #创建一个全新的变量,如果变量同名,则在名称后自动递增。
1)生成一个初始值为initial-value的变量,必须指定初始化值。
2)与tf.name_scope()和tf.variable_scope()都可搭配,主要跟tf.name_scope()搭配
3)创建同名变量:不管在tf.name_scope()、tf.variable_scope()里,还是没有任何命名管理空间时,创建同名变量(假设二者都为"myname"),会自动创建自动递增的变量名(如myname_1,myname_2) -
tf.get_variable() #用于创建共享变量。不能创建同名变量,只能共享同名变量。
1)可以用各种初始化方法,不用明确指定值。
2)tf.name_scope() 并不会对 tf.get_variable() 创建的变量有任何影响,不会给变量添加前缀。
3)在name_scope中或者没有任何命名空间时,使用tf.get_variable() ,只能创建不同名的变量(同名变量会报错)
4)在variable_scope中使用tf.get_variable() ,在不启用scope.reuse_variables()或者设置reuse=True的情况下,只能创建不同名的变量(同名变量会报错)
5)在variable_scope中使用tf.get_variable() ,启用scope.reuse_variables()或者设置reuse=True,可以出现同名变量,但不是新建,而是共享同名变量。
共享同名变量的三种方式
使用同名变量是要进行相关的设置的。下面会有几种方式:
方式一:scope.reuse_variables() # 设置共享变量
方式二:reuse=True
方式三:直接指定前面的那个variable_scope