版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shwan_ma/article/details/84852843
在初学tensorflow的时候,我们会发现在函数体内定义tf.variable()或者tf.get_variable()变量的时候,跟其他语言不同,在tensorflow的函数体内定义的变量并不会随着函数的执行结束而消失。这是因为tensorflow设置的全局变量及局部变量与其他语言有着本质的不同,这是因为tf里面是由图定义的,内部的变量区分为
tf.GraphKeys.GLOBAL_VARIABLES #=> 'variables'
tf.GraphKeys.LOCAL_VARIABLES #=> 'local_variables'
tf.GraphKeys.MODEL_VARIABLES #=> 'model_variables'
tf.GraphKeys.TRAINABLE_VARIABLES #=> 'trainable_variables'
本文主要分析GLOBAL_VARIABLES与LOCAL_VARIABLES之间的区别:
- 对于局部变量来说,其变量也是一种普通的变量,不过其定义在tf.GraphKeys.LOCAL_VARIABLES。通常该集合用于保存程序用于初始化的默认变量列表,因此local指定的变量在默认情况下不会保存。即不会保存到checkpoint中。
- 定义一个局部变量:需要显示指定所在的变量集合collection
e = tf.Variable(6, name='var_e', collections=[tf.GraphKeys.LOCAL_VARIABLES])
此处举一个例子来表明TF的全局变量及局部变量:
import tensorflow as tf
def some_func():
z = tf.Variable(1, name='var_z')
a = tf.Variable(1, name='var_a')
b = tf.get_variable('var_b', 2)
with tf.name_scope('aaa'):
c = tf.Variable(3, name='var_c')
with tf.variable_scope('bbb'):
d = tf.Variable(3, name='var_d')
some_func()
some_func()
print [str(i.name) for i in tf.global_variables()]
print [str(i.name) for i in tf.local_variables()]
结果:
['var_a:0', 'var_b:0', 'aaa/var_c:0', 'bbb/var_d:0', 'var_z:0', 'var_z_1:0']
[]