当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.Variable用法及代码示例


请参阅变量指南。

用法

tf.Variable(
    initial_value=None, trainable=None, validate_shape=True, caching_device=None,
    name=None, variable_def=None, dtype=None, import_scope=None, constraint=None,
    synchronization=tf.VariableSynchronization.AUTO,
    aggregation=tf.compat.v1.VariableAggregation.NONE, shape=None
)

参数

  • initial_value Tensor 或可转换为 Tensor 的 Python 对象,这是变量的初始值。除非 validate_shape 设置为 False,否则初始值必须具有指定的形状。也可以是不带参数的可调用对象,在调用时返回初始值。在这种情况下,必须指定dtype。 (请注意,init_ops.py 中的初始化函数必须先绑定到形状,然后才能在此处使用。)
  • trainable 如果 True ,GradientTapes 会自动监视此变量的使用。默认为 True ,除非 synchronization 设置为 ON_READ ,在这种情况下它默认为 False
  • validate_shape 如果 False ,允许使用未知形状的值初始化变量。如果 True 是默认值,则必须知道 initial_value 的形状。
  • caching_device 注意:此参数仅在使用 v1 样式 Session 时有效。可选的设备字符串,说明应缓存变量以供读取的位置。默认为变量的设备。如果不是 None ,则缓存在另一台设备上。典型用途是在使用变量的操作所在的设备上进行缓存,通过Switch 和其他条件语句进行重复数据删除。
  • name 变量的可选名称。默认为 'Variable' 并自动获取唯一性。
  • variable_def VariableDef 协议缓冲区。如果不是 None ,则使用其内容重新创建变量对象,引用图中必须已经存在的变量节点。图表没有改变。 variable_def 和其他参数是互斥的。
  • dtype 如果设置,initial_value 将被转换为给定的类型。如果 None ,或者保留数据类型(如果 initial_value 是张量),或者 convert_to_tensor 将决定。
  • import_scope 可选 string 。要添加到Variable. 的名称范围仅在从协议缓冲区初始化时使用。
  • constraint Optimizer 更新后应用于变量的可选投影函数(例如,用于实现层权重的范数约束或值约束)。该函数必须将表示变量值的未投影张量作为输入,并返回投影值的张量(必须具有相同的形状)。在进行异步分布式训练时使用约束是不安全的。
  • synchronization 指示何时聚合分布式变量。接受的值是在类 tf.VariableSynchronization 中定义的常量。默认情况下,同步设置为AUTO,当前的DistributionStrategy 选择何时同步。
  • aggregation 指示如何聚合分布式变量。接受的值是在类 tf.VariableAggregation 中定义的常量。
  • shape (可选)此变量的形状。如果没有,将使用 initial_value 的形状。当将此参数设置为tf.TensorShape(None)(表示未指定的形状)时,可以为变量分配不同形状的值。

抛出

  • ValueError 如果同时指定 variable_def 和 initial_value。
  • ValueError 如果未指定初始值,或没有形状且 validate_shapeTrue

属性

  • aggregation
  • constraint 返回与此变量关联的约束函数。
  • device 此变量的设备。
  • dtype 该变量的DType
  • graph 该变量的Graph
  • initial_value 返回用作变量初始值的张量。

    请注意,这与 initialized_value() 不同,后者在返回其值之前运行初始化变量的操作。此方法返回初始化变量的操作所使用的张量。

  • initializer 此变量的初始化操作。
  • name 此变量的名称。
  • op 该变量的Operation
  • shape 该变量的TensorShape
  • synchronization
  • trainable

变量维护由程序操作的共享的、持久的状态。

Variable() 构造函数需要变量的初始值,它可以是任何类型和形状的 Tensor。这个初始值定义了变量的类型和形状。构造后,变量的类型和形状是固定的。可以使用其中一种分配方法更改该值。

v = tf.Variable(1.)
v.assign(2.)
<tf.Variable ... shape=() dtype=float32, numpy=2.0>
v.assign_add(0.5)
<tf.Variable ... shape=() dtype=float32, numpy=2.5>

Variable 的构造函数的 shape 参数允许您构造一个形状比其 initial_value 定义更少的变量:

v = tf.Variable(1., shape=tf.TensorShape(None))
v.assign([[1.]])
<tf.Variable ... shape=<unknown> dtype=float32, numpy=array([[1.]], ...)>

就像任何 Tensor 一样,使用 Variable() 创建的变量可以用作操作的输入。此外,为Tensor 类重载的所有运算符都被转移到变量中。

w = tf.Variable([[1.], [2.]])
x = tf.constant([[3., 4.]])
tf.matmul(w, x)
<tf.Tensor:... shape=(2, 2), ... numpy=
  array([[3., 4.],
         [6., 8.]], dtype=float32)>
tf.sigmoid(w + x)
<tf.Tensor:... shape=(2, 2), ...>

在构建机器学习模型时,通常可以方便地区分包含可训练模型参数的变量和其他变量,例如用于计算训练步数的 step 变量。为了使这更容易,变量构造函数支持trainable=<bool> 参数。 tf.GradientTape 默认监视可训练变量:

with tf.GradientTape(persistent=True) as tape:
  trainable = tf.Variable(1.)
  non_trainable = tf.Variable(2., trainable=False)
  x1 = trainable * 2.
  x2 = non_trainable * 3.
tape.gradient(x1, trainable)
<tf.Tensor:... shape=(), dtype=float32, numpy=2.0>
assert tape.gradient(x2, non_trainable) is None  # Unwatched

当分配给从 tf.Module 继承的类型的属性时,会自动跟踪变量。

m = tf.Module()
m.v = tf.Variable([1.])
m.trainable_variables
(<tf.Variable ... shape=(1,) ... numpy=array([1.], dtype=float32)>,)

然后,此跟踪允许将变量值保存到训练检查点或包含序列化 TensorFlow 图的 SavedModel。

变量通常由tf.function s 捕获和操作。这与 un-decorated 函数的工作方式相同:

v = tf.Variable(0.)
read_and_decrement = tf.function(lambda:v.assign_sub(0.1))
read_and_decrement()
<tf.Tensor:shape=(), dtype=float32, numpy=-0.1>
read_and_decrement()
<tf.Tensor:shape=(), dtype=float32, numpy=-0.2>

tf.function 内创建的变量必须在函数外部拥有并且只能创建一次:

class M(tf.Module):
  @tf.function
  def __call__(self, x):
    if not hasattr(self, "v"): # Or set self.v to None in __init__
      self.v = tf.Variable(x)
    return self.v * x
m = M()
m(2.)
<tf.Tensor:shape=(), dtype=float32, numpy=4.0>
m(3.)
<tf.Tensor:shape=(), dtype=float32, numpy=6.0>
m.v
<tf.Variable ... shape=() dtype=float32, numpy=2.0>

有关详细信息,请参阅tf.function 文档。

子类

class SaveSliceInfo

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.Variable。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。