请参阅变量指南。
用法
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_shape
为True
。
属性
-
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
文档。
子类
相关用法
- Python tf.Variable.__lt__用法及代码示例
- Python tf.Variable.__pow__用法及代码示例
- Python tf.Variable.__le__用法及代码示例
- Python tf.Variable.initialized_value用法及代码示例
- Python tf.Variable.__matmul__用法及代码示例
- Python tf.Variable.ref用法及代码示例
- Python tf.Variable.__getitem__用法及代码示例
- Python tf.Variable.load用法及代码示例
- Python tf.Variable.__gt__用法及代码示例
- Python tf.Variable.__rpow__用法及代码示例
- Python tf.Variable.__abs__用法及代码示例
- Python tf.Variable.scatter_nd_add用法及代码示例
- Python tf.Variable.eval用法及代码示例
- Python tf.Variable.scatter_nd_sub用法及代码示例
- Python tf.Variable.__sub__用法及代码示例
- Python tf.Variable.__rmatmul__用法及代码示例
- Python tf.Variable.__rsub__用法及代码示例
- Python tf.Variable.scatter_nd_update用法及代码示例
- Python tf.Variable.__ge__用法及代码示例
- Python tf.compat.v1.distributions.Multinomial.stddev用法及代码示例
注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.Variable。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。