Tensorflow中常见的变量初始化函数
初始化函数 | 功能 | 主要参数 |
---|---|---|
tf.constant_initializer | 将变量初始化为给定的常量 | 常量的取值 |
tf.random_normal_initializer | 将变量初始化为满足正态分布的随机值 | 正态分布的均值和标准差 |
tf.truncated_normal_initializer | 将变量初始化为满足正态分布的随机值,但如果随机出来的值偏离平均值超过2个标准差,那么这个数将会被重新随机 | 正态分布的均值和标准差 |
tf.random_uniform_initializer | 将变量初始化为满足平均分布的随机值 | 最大,最小值 |
tf.uniform_unit_scaling_initializer | 将变量初始化为满足平均分布但不影响输出量级的随机值 | factor(产生随机值时乘以的系数) |
tf.zero_initializer | 将变量设置为0 | 变量维度 |
tf.ones_initializer | 将变量设置为1 | 变量维度 |
使用tf.variable_scope函数来控制tf.get_variable函数获取已经创建的函数
1 | #在名字为foo的命名空间内创建名字为v的变量 |
上面的样例简单地说明了通过tf.variable_scope 函数可以控制tf.get_variable函数的语义。当tf.variable_scope 函数使用参数reuse=True 生成上下文管理器时,这个上下文管理器内所有的tf.get_variable 函数会直接获取已经创建的变量。如果变量不存在,则tf.get_variable函数将报错; 相反,如果tf.variabe_scope 函数使用参数reuse=None 或者reuse=False 创建上下文管理器,tf.get_variable 操作将创建新的变量。如果同名的变量已经存在,则tf.get_variable函数将报错。TensorFlow 中tf.variable_scope函数是可以嵌套的。下面的程序说明了当tf.variable_scope函数嵌套时,reuse参数的取值是如何确定的。
1 | with tf.variable_scope("root"): |
tf.variable_scope函数生成的上下文管理器也会创建个TensorFlow中的命名空间,在命名空间内创建的变量名称都会带上这个命名空间名作为前级缀。所以,tf.variable_scope函数除了可以控制tf.get_variable执行的功能之外,这个函数也提供了一个管理变量命名空间的方式。以下代码显示了如何通过tf.variable_scope来管理变量的名称。
1 | v1 = tf.get_variable("v", [1]) |