tf.get_variable:使用这些参数获取现有变量或创建一个新变量。
该函数的作用是创建新的tensorflow变量,常见的initializer有:
常量初始化器 : tf.constant_initializer、
正态分布初始化器 : tf.random_normal_initializer、
截断正态分布初始化器 : tf.truncated_normal_initializer、
均匀分布初始化器 : tf.random_uniform_initializer。
import tensorflow as tf;
import numpy as np;
# 常量初始化器
v1_cons = tf.get_variable('v1_cons', shape=[1, 4], initializer=tf.constant_initializer())
v2_cons = tf.get_variable('v2_cons', shape=[1, 4], initializer=tf.constant_initializer(9))
# 正态分布初始化器
v1_nor = tf.get_variable('v1_nor', shape=[1, 4], initializer=tf.random_normal_initializer())
v2_nor = tf.get_variable('v2_nor', shape=[1, 4],
initializer=tf.random_normal_initializer(mean=0, stddev=5, seed=0)) # 均值、方差、种子值
# 截断正态分布初始化器
v1_trun = tf.get_variable('v1_trun', shape=[1, 4], initializer=tf.truncated_normal_initializer())
v2_trun = tf.get_variable('v2_trun', shape=[1, 4],
initializer=tf.truncated_normal_initializer(mean=0, stddev=5, seed=0)) # 均值、方差、种子值
# 均匀分布初始化器
v1_uni = tf.get_variable('v1_uni', shape=[1, 4], initializer=tf.random_uniform_initializer())
v2_uni = tf.get_variable('v2_uni', shape=[1, 4],
initializer=tf.random_uniform_initializer(maxval=-1., minval=1., seed=0)) # 最大值、最小值、种子值
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print("常量初始化器v1_cons:", sess.run(v1_cons))
print("常量初始化器v2_cons:", sess.run(v2_cons))
print("正态分布初始化器v1_nor:", sess.run(v1_nor))
print("正态分布初始化器v2_nor:", sess.run(v2_nor))
print("截断正态分布初始化器v1_trun:", sess.run(v1_trun))
print("截断正态分布初始化器v2_trun:", sess.run(v2_trun))
print("均匀分布初始化器v1_uni:", sess.run(v1_uni))
print("均匀分布初始化器v2_uni:", sess.run(v2_uni))
# 输出结果:
# 常量初始化器v1_cons: [[0. 0. 0. 0.]]
# 常量初始化器v2_cons: [[9. 9. 9. 9.]]
# 正态分布初始化器v1_nor: [[ 0.1405017 -1.0637658 -1.631958 -0.6858331]]
# 正态分布初始化器v2_nor: [[-1.9957879 10.522196 0.8553612 2.7325907]]
# 截断正态分布初始化器v1_trun: [[1.4671806 1.401085 1.3024487 0.8837652]]
# 截断正态分布初始化器v2_trun: [[-1.9957879 0.8553612 2.7325907 2.1127698]]
# 均匀分布初始化器v1_uni: [[0.7386234 0.36884522 0.658229 0.95516753]]
# 均匀分布初始化器v2_uni: [[ 0.79827476 -0.9403336 -0.69752836 0.9034374 ]]
tf.compat.v1.get_variable(
name,
shape=None,
dtype=None,
initializer=None,
regularizer=None,
trainable=None,
collections=None,
caching_device=None,
partitioner=None,
validate_shape=True,
use_resource=None,
custom_getter=None,
constraint=None,
synchronization=tf.VariableSynchronization.AUTO,
aggregation=tf.compat.v1.VariableAggregation.NONE
)
此函数在名称前加上当前变量作用域,并执行重用检查。有关重用的工作原理的详细说明,请参见“ 可变作用域”。这是一个基本示例:
import tensorflow as tf
def foo():
with tf.variable_scope("foo", reuse=tf.AUTO_REUSE):
v = tf.get_variable("v", [1])
return v
v1 = foo() # Creates v.
v2 = foo() # Gets the same, existing v.
assert v1 == v2
print(v1)
print(v2)
# 输出结果:
# <tf.Variable 'foo/v:0' shape=(1,) dtype=float32_ref>
# <tf.Variable 'foo/v:0' shape=(1,) dtype=float32_ref>
如果initializer是None(默认值),则将使用在变量范围中传递的默认initializer。如果默认initializer也是None, 将使用一个glorot_uniform_initializer。initializer也可以是一个Tensor,在这种情况下,变量将初始化为该值和形状。
同样,如果regularizer正则化器为None(默认值),则将使用在变量范围中传递的默认regularizer正则化器(如果默认regularizer也是None,则默认情况下不执行任何regularization正则化)。
如果提供了partitioner分区程序,则返回一个PartitionedVariable。以一个Tensor形式访问此对象将返回沿着分区轴串联的碎片。
一些有用的partitioners可用。参见例如:variable_axis_size_partitioner和min_max_variable_partitioner。
Args | |
|---|---|
name | 新变量或现有变量的名称。 |
shape | 新变量或现有变量的形状。 |
dtype | 新变量或现有变量的类型(默认为DT_FLOAT)。 |
initializer | 变量的初始化(如果已创建)。可以是一个initializer初始化对象或一个张量。如果它是张量,必须知道其形状,除非validate_shape为False,。 |
regularizer | 一个(Tensor-> Tensor或None)函数; 将其应用于新创建的变量的结果将添加到集合tf.GraphKeys.REGULARIZATION_LOSSES中 ,并可用于正则化。 |
trainable | 如果为True,也要将变量添加到图集合GraphKeys.TRAINABLE_VARIABLES中 (请参阅参考资料tf.Variable)。 |
collections | 要添加变量的图集合键列表。默认为[GraphKeys.GLOBAL_VARIABLES](请参阅 tf.Variable)。 |
caching_device | 可选设备字符串或函数,用于描述应将变量缓存在何处以进行读取。默认为变量的设备。如果不是None,则在另一台设备上缓存。典型用途是在Ops使用变量驻留的设备上缓存,通过Switch和其他条件语句对副本进行重复数据删除。 |
partitioner | 可选的callable,它接受完全定义的要创建的Variable的TensorShape 和dtype,并返回每个轴的partitions列表(当前只能对一个轴进行分区)。 |
validate_shape | 如果为False,则允许使用未知形状的值初始化变量。如果为True(默认值),则必须知道initial_value的形状。为此,要被使用的initializer必须是一个Tensor而不是一个initializer对象。 |
use_resource | 如果为False,则创建一个常规变量。如果为true,则使用定义良好的语义创建实验性ResourceVariable。默认为False(以后将更改为True)。启用急切执行后,此参数始终被强制为True。 |
custom_getter | Callable以真实的getter作为第一个参数,并允许覆盖内部的get_variable方法。custom_getter的签名应与此方法的签名相匹配,但最适合将来的版本将允许进行更改:def custom_getter(getter, *args, **kwargs) 。也可以直接访问所有get_variabledef参数:custom_getter(getter, name, *args, **kwargs) 。一个简单的自定义标识getter,它简单地创建具有修改名称的变量:
|
constraint | 由Optimizer更新后将应用于变量的一个可选投影函数(例如,用于实现图层权重的范数约束或值约束)。该函数必须将代表变量值的未投影张量作为输入,并返回投影值的张量(必须具有相同的形状)。在进行异步分布式训练时,使用约束并不安全。 |
synchronization | 指示何时分布式变量将被聚合。接受的值是在tf.VariableSynchronization类中定义的常量。默认情况下,synchronization设置为 AUTO,并且当前的DistributionStrategy选择何时进行同步。 |
aggregation | 指示将如何聚合分布式变量。接受的值是在tf.VariableAggregation类中定义的常量 。 |
Returns | |
|---|---|
创建的或现有的Variable(或PartitionedVariable,如果使用了partitioner)。 |
Raises | |
|---|---|
ValueError | 当创建新变量且未声明shape时,在变量创建过程中违反重用时或initializer dtype与dtype不匹配时。重用设置在variable_scope内部。 |

329

被折叠的 条评论
为什么被折叠?



