请参阅变量指南。
继承自: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_shape
为True
。 -
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)
要使用没有这些问题的变量的替换:
- 构造
tf.Variable
时添加use_resource=True
; - 在
tf.compat.v1.get_variable()
调用之前,在tf.compat.v1.variable_scope
中调用tf.compat.v1.get_variable_scope().set_use_resource(True)
。
子类
相关用法
- Python tf.compat.v1.Variable.eval用法及代码示例
- Python tf.compat.v1.Variable.initialized_value用法及代码示例
- Python tf.compat.v1.Variable.__getitem__用法及代码示例
- Python tf.compat.v1.Variable.__rmatmul__用法及代码示例
- Python tf.compat.v1.Variable.__ge__用法及代码示例
- Python tf.compat.v1.Variable.__pow__用法及代码示例
- Python tf.compat.v1.Variable.scatter_nd_update用法及代码示例
- Python tf.compat.v1.Variable.__le__用法及代码示例
- Python tf.compat.v1.Variable.__rpow__用法及代码示例
- Python tf.compat.v1.Variable.load用法及代码示例
- Python tf.compat.v1.Variable.scatter_nd_add用法及代码示例
- Python tf.compat.v1.Variable.__gt__用法及代码示例
- Python tf.compat.v1.Variable.scatter_nd_sub用法及代码示例
- Python tf.compat.v1.Variable.ref用法及代码示例
- Python tf.compat.v1.Variable.__sub__用法及代码示例
- Python tf.compat.v1.Variable.__abs__用法及代码示例
- Python tf.compat.v1.Variable.__matmul__用法及代码示例
- Python tf.compat.v1.Variable.__lt__用法及代码示例
- Python tf.compat.v1.Variable.__rsub__用法及代码示例
- Python tf.compat.v1.distributions.Multinomial.stddev用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.compat.v1.Variable。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。