创建变量
Tensorflow创建变量有两种方式:
- tf.get_variable()
- tf.Variable()
它们的区别如下:
在 tf.name_scope下时,tf.get_variable()创建的变量名不受 name_scope 的影响,而且在未指定共享变量时,如果重名会报错,tf.Variable()会自动检测有没有变量重名,如果有则会自行处理。
|
|
如果使用tf.get_variable()创建变量,且没有设置共享变量,重名时会报错
|
|
共享变量
基础写法
如果要共享变量,需要使用tf.variable_scope()
|
|
或者如下形式:
|
|
还可以像下面这样编写:
|
|
更优雅的写法
之前的几种写法是在重复使用(非第一次使用)的时候设置reuse=True来再次调用共享变量作用域(variable_scope),这是一种比较笨的方式,下面使用tf.AUTO_REUSE的写法或许更加优雅:
|
|
实例:
|
|
reuse参数使用
- 当参数reuse=False,函数get_variable()表示创建变量
|
|
- 当参数reuse=True,函数get_variable()表示获取变量
|
|
在tf.variable_scope()函数中,设置reuse=True时,在其命名空间”foo”中执行函数get_variable()时,表示获取变量”v”。若在该命名空间中还没有该变量,则在获取时会报错,实例如下:
|
|
参考
[1]: tensorflow里面name_scope, variable_scope等如何理解?
[2]: tf.AUTO_REUSE作用
[3]: TensorFlow中变量管理reuse参数的使用