tf.Variable() :一般变量用这种方式定义。 * 可以选择 trainable 类型 *
tf.get_variable() :一般都是和 tf.variable_scope() 配合使用,从而实现变量共享的功能。 * 可以选择 trainable 类型 *
【注意:】tf.get_variable()和tf.Variable()不是一回事!!两个的区别有好几处:
①比如,tf.Variable()在定义的时候必须初始化,而tf.get_variable()定义的时候可以先不进行初始化操作。
②想要进行变量共享,必须使用tf.get_variable()实现,搭配命名空间,以及reuse关键字的使用,就可以实现变量的共享;而tf.Variable()每次都会生成一个新的变量。
占位符[tf.placeholder()]并不是变量,待输入训练常量。** trainable==False **
变量的初始化操作的几种方式:
1.在定义的时候直接初始化,比如
b = tf.get_variable("b", b.shape, trainable=False, initializer=tf.constant_initializer(b))
2.在会话中使用sess.run()进行初始化,比如
sess.run(tf.global_variables_initializer()) # 初始化全局变量
sess.run(tf.local_variables_initializer()) # 初始化本地变量
3.如果只想要初始化一部分指定变量,使用:
sess.run(tf.variables_initializer(var_list))
其中,var_list是需要初始化的变量列表。
变量在使用前一定要进行初始化,且变量的初始化必须在模型的其它操作运行之前完成。变量的初始化有三种方式,如程序2-13所示:
程序2-13:
初始化全部变量、初始化变量的子集以及初始化单个变量。首先,global_variables_initializer()方法是不管全局有多少个变量,全部进行初始化,是最简单也是最常用的一种方式;variables_initializer()是初始化变量的子集,相比于全部初始化化的方式更加节约内存;Variable()是初始化单个变量,函数的参数便是要初始化的变量内容。通过上述的三种方式,我们便可以实现变量的初始化,放心的使用变量了。