1 变量管理
TF提供了通过变量名称来创建和获取一个变量的机制,不需要将变量的参数到处传递。
主要通过tf.get_variable
和tf.variable_scope
实现。
tf.Variable和tf.get_variable等价使用样例:
weight = tf.get_variable(name='weights', shape=[5, 5, 3, 1], initializer=tf.truncated_normal_initializer(stddev=0.1))
weight = tf.Variable(tf.truncated_normal(shape=[5, 5, 3, 1], stddev=0.1),name='weights')
TF中的initializer函数和之前的常量生成函数大部分一一对应。如下:
表 TF中的变量初始化函数
初始化函数名称 | 将变量初始化为 | 主要参数 |
---|---|---|
tf.random_nomal_initializer | 正态分布 | 均值、标准差 |
tf.truncated_normal_initializer | 正态分布,但如果随机出来的值偏离平均值超过2个标准差,那么这个数将会被重新随机 | 均值、标准差 |
tf.random_uniform_initializer | 平均分布 | 最小、最大取值 |
tf.constant_initializer | 给定常量 | 常数取值 |
tf.uniform_unit_scaling_initializer | 平均分布但不影响输出数量级 | factor(产生随机值时乘以的系数) |
tf.zeros_initializer | 全0 | 变量维度 |
tf.ones_initializer | 全1 | 变量维度 |
对于tf.get_variable
,name必填而tf.variable_scope
选填。避免变量复用造成的错误。
如果需要通过tf.get_variable
获取一个已经创建的变量,需要通过tf.variable_scope
生成一个上下文管理器,若reuse参数为True,则此管理器中的所有tf.get_variable
将直接获取已经生成的变量,若为None或False,则创建新的变量,此时若存在同名变量则报错。
#在命名空间foo内创建变量v
with tf.variable_scope("foo"):
v = tf.get_variable(name="v", shape=[1], initializer=tf.constant_initializer(1.0))
#获取已经声明的变量
with tf.variable_scope("foo", reuse=True):
v1=tf.get_variable(name="v",shape=[1])
print(v==v1)