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


Python tf.compat.v1.Variable用法及代码示例


请参阅变量指南。

继承自:Variable

用法

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

抛出

  • ValueError 如果同时指定 variable_def 和 initial_value。
  • ValueError 如果未指定初始值,或没有形状且 validate_shapeTrue
  • RuntimeError 如果启用了即刻执行。

属性

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

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

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

变量在对 run() 的调用中维护图中的状态。您可以通过构造类 Variable 的实例将变量添加到图形中。

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

如果以后要更改变量的形状,则必须将 assign Op 与 validate_shape=False 一起使用。

就像任何 Tensor 一样,使用 Variable() 创建的变量可以用作图中其他 Ops 的输入。此外,为Tensor 类重载的所有运算符都被转移到变量中,因此您还可以通过对变量进行算术运算来将节点添加到图中。

import tensorflow as tf

# Create a variable.
w = tf.Variable(<initial-value>, name=<optional-name>)

# Use the variable in the graph like any Tensor.
y = tf.matmul(w, ...another variable or tensor...)

# The overloaded operators are available too.
z = tf.sigmoid(w + y)

# Assign a new value to the variable with `assign()` or a related method.
w.assign(w + 1.0)
w.assign_add(1.0)

启动图表时,必须明确初始化变量,然后才能运行使用其值的操作。您可以通过运行其初始化程序操作、从保存文件恢复变量或简单地运行一个变量来初始化一个变量assign为变量赋值的操作。事实上,变量初始化操作只是一个assign将变量的初始值分配给变量本身的操作。

# Launch the graph in a session.
with tf.compat.v1.Session() as sess:
    # Run the variable initializer.
    sess.run(w.initializer)
    # ...you now can run ops that use the value of 'w'...

最常见的初始化模式是使用便利函数global_variables_initializer() 将 Op 添加到初始化所有变量的图中。然后在启动图表后运行该操作。

# Add an Op to initialize global variables.
init_op = tf.compat.v1.global_variables_initializer()

# Launch the graph in a session.
with tf.compat.v1.Session() as sess:
    # Run the Op that initializes global variables.
    sess.run(init_op)
    # ...you can now run any Op that uses variable values...

如果您需要创建一个初始值依赖于另一个变量的变量,请使用另一个变量的 initialized_value() 。这可确保以正确的顺序初始化变量。

所有变量都会自动收集在创建它们的图表中。默认情况下,构造函数将新变量添加到图形集合 GraphKeys.GLOBAL_VARIABLES 。便利函数global_variables() 返回该集合的内容。

在构建机器学习模型时,通常可以方便地区分包含可训练模型参数的变量和其他变量,例如用于计算训练步数的 global step 变量。为了使这更容易,变量构造函数支持trainable=<bool> 参数。如果 True ,新变量也会添加到图形集合 GraphKeys.TRAINABLE_VARIABLES 。便利函数trainable_variables() 返回此集合的内容。各种Optimizer 类使用此集合作为要优化的变量的默认列表。

警告:tf.Variable 对象默认具有非直观的内存模型。变量在内部表示为可变张量,它可以不确定地为图中的其他张量起别名。消耗变量并可能导致别名的操作集是不确定的,并且可以在不同的 TensorFlow 版本中更改。避免编写依赖于变量值的代码,无论其他操作发生时发生变化或不变化。例如,在tf.cond 中使用变量对象或其简单函数作为谓词是危险的,并且error-prone:

v = tf.Variable(True)
tf.cond(v, lambda:v.assign(False), my_false_fn)  # Note:this is broken.

在这里,在构造变量时添加 use_resource=True 将解决任何不确定性问题:

v = tf.Variable(True, use_resource=True)
tf.cond(v, lambda:v.assign(False), my_false_fn)

要使用没有这些问题的变量的替换:

子类

class SaveSliceInfo

相关用法


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