https://blog.csdn.net/zz2230633069/article/details/81414330
权值共享常使用的情况,一些需要共享的变量,比如神经网络里面的权重,word embedding这种变量,这样就会选择使用共享变量。而比如global_step这种仅仅用来追踪训练步数的变量,它并不是trainable的,那么直接用tf.Variable()方法。
get_variable( name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=True, collections=None, caching_device=None, partitioner=None, validate_shape=True, use_resource=None, custom_getter=None )参数: 1.name:新变量或现有变量的名称。 2.shape:新变量或现有变量的形状。 3.dtype:新变量或现有变量的类型(默认为 DT_FLOAT)。 4.initializer:创建变量的初始化器。如果初始化器为 None(默认),则将使用在变量范围内传递的默认初始化器(如果另一个也是 None,那么一个 glorot_uniform_initializer (也称之为Xavier uniform initializer)将被使用)。初始化器也可以是张量,在这种情况下,变量被初始化为该值和形状。 5.regularizer:一个函数,将其应用于新创建的变量的结果将被添加到集合 tf.GraphKeys.REGULARIZATION_LOSSES 中,并可用于正则化。类似地,如果正则化器是 None(默认),则将使用在变量范围内传递的默认正则符号(如果另一个也是 None,则默认情况下不执行正则化)。 6.trainable:如果为 True,还将变量添加到图形集合:GraphKeys.TRAINABLE_VARIABLES。 7.collections:要将变量添加到其中的图形集合键的列表。默认为 [GraphKeys.LOCAL_VARIABLES]。 8.caching_device:可选的设备字符串或函数,描述变量应该被缓存以读取的位置。默认为变量的设备,如果不是 None,则在其他设备上进行缓存。典型的用法的在使用该变量的操作所在的设备上进行缓存,通过 Switch 和其他条件语句来复制重复数据删除。 9.partitioner:(可选)可调用性,它接受要创建的变量的完全定义的 TensorShape 和 dtype,并且返回每个坐标轴的分区列表(当前只能对一个坐标轴进行分区)。 10.validate_shape:如果为假,则允许使用未知形状的值初始化变量。如果为真,则默认情况下,initial_value 的形状必须是已知的。 11.use_resource:如果为假,则创建一个常规变量。如果为真,则创建一个实验性的 ResourceVariable,而不是具有明确定义的语义。默认为假(稍后将更改为真)。 12.custom_getter:可调用的,将第一个参数作为真正的 getter,并允许覆盖内部的 get_variable 方法。custom_getter 的签名应该符合这种方法,但最经得起未来考验的版本将允许更改:def custom_getter(getter, *args, **kwargs)。还允许直接访问所有 get_variable 参数:def custom_getter(getter, name, *args, **kwargs)。创建具有修改的名称的变量的简单标识自定义 getter 是:python def custom_getter(getter, name, *args, **kwargs): return getter(name + ‘_suffix’, *args, **kwargs)
返回值: 创建或存在Variable(或者PartitionedVariable,如果使用分区器)。
可能引发的异常: ValueError:当创建新的变量和形状时,在变量创建时违反重用,或当 initializer 的 dtype 和 dtype 不匹配时。在 variable_scope 中设置重用。