
如果你定义的变量名称在之前已被定义过,则TensorFlow 会引发异常。可使用tf.get_variable( ) 函数代替tf.Variable( )。如果变量存在,函数tf.get_variable( ) 会返回现有的变量。如果变量不存在,会根据给定形状和初始值创建变量。
tf.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.VariableAggregation.NONE
)下面是一个基本的例子:
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如果初始化器为None(缺省值),则将使用在变量范围中传递的缺省初始化器。如果没有,则使用glorot_uniform_initializer。初始化器也可以是一个张量,在这种情况下,变量初始化为这个值和形状。类似地,如果正则化器为None(默认值),则将使用在变量范围中传递的默认正则化器(如果也是None,则默认情况下不执行正则化)。如果提供了分区程序,则返回一个PartitionedVariable。以张量的形式访问这个对象,返回沿分区轴连接的切分。可以使用一些有用的分区器。参见,例如,variable_axis_size_partitioner和min_max_variable_partitioner。
参数:
shape:新变量或现有变量的形状。initializer:如果创建了变量的初始化器。可以是初始化器对象,也可以是张量。如果它是一个张量,它的形状必须是已知的,除非validate_shape是假的。regularizer:A(张量->张量或无)函数;将其应用于新创建的变量的结果将添加到集合tf.GraphKeys中。正则化-损耗,可用于正则化。trainable:如果为真,也将变量添加到图形集合GraphKeys中。TRAINABLE_VARIABLES(见tf.Variable)。collections:要向其中添加变量的图形集合键的列表。默认为[GraphKeys.GLOBAL_VARIABLES](见tf.Variable)。constraint:优化器更新后应用于变量的可选投影函数(例如,用于为层权重实现规范约束或值约束)。函数必须将表示变量值的未投影张量作为输入,并返回投影值的张量(其形状必须相同)。在进行异步分布式培训时使用约束并不安全。synchronization:指示何时聚合分布式变量。可接受的值是在tf.VariableSynchronization类中定义的常量。默认情况下,同步设置为AUTO,当前分发策略选择何时同步。如果同步设置为ON_READ,则不能将trainable设置为True。aggregation:指示如何聚合分布式变量。可接受的值是在tf.VariableAggregation类中定义的常量。返回值:
可能产生的异常:
ValueError: when creating a new variable and shape is not declared, when violating reuse during variable creation, or when initializer dtype and dtype don't match. Reuse is set inside variable_scope