目录
变量跨run()调用在图中维护状态。通过构造类变量的实例,可以向图中添加一个变量。Variable()构造函数需要变量的初值,它可以是任何类型和形状的张量。初值定义变量的类型和形状。构造完成后,变量的类型和形状是固定的。可以使用指定方法之一更改值。如果稍后要更改变量的形状,必须使用带有validate_shape=False的赋值Op。与任何张量一样,使用Variable()创建的变量可以用作图中其他Ops的输入。此外,张量类的所有重载运算符都被传递到变量上,因此您也可以通过对变量进行算术将节点添加到图中。
- import tensorflow as tf
-
- # Create a variable.
- w = tf.Variable(
, 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)
启动图形时,必须显式初始化变量,然后才能运行使用其值的操作系统。你可以通过运行变量的初始化器op、从保存文件中还原变量,或者简单地运行赋值op来初始化变量。事实上,变量初始化器op只是一个赋值op,它将变量的初值赋给变量本身。
- # 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添加到初始化所有变量的图中。然后在启动图表之后运行该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()。这确保变量以正确的顺序初始化。所有变量都自动收集到创建它们的图中。默认情况下,构造函数将新变量添加到graph collection GraphKeys.GLOBAL_VARIABLES。函数global_variables()返回集合的内容。在构建机器学习模型时,通常可以方便地区分包含可训练模型参数的变量和其他变量,例如用于计算训练步骤的全局步骤变量。为了简化这一点,变量构造函数支持一个可训练的=
__init__- __init__(
- 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的新变量。新变量被添加到集合中列出的图形集合中,集合默认为[GraphKeys.GLOBAL_VARIABLES]。如果trainable为真,则该变量还将添加到graph collection GraphKeys.TRAINABLE_VARIABLES中。这个构造函数创建一个变量Op和一个赋值Op来将变量设置为其初始值。
参数:
constraint:优化器更新后应用于变量的可选投影函数(例如,用于为层权重实现规范约束或值约束)。函数必须将表示变量值的未投影张量作为输入,并返回投影值的张量(其形状必须相同)。在进行异步分布式培训时使用约束并不安全。synchronization:指示何时聚合分布式变量。可接受的值是在tf.VariableSynchronization类中定义的常量。默认情况下,同步设置为AUTO,当前分发策略选择何时同步。aggregation:指示如何聚合分布式变量。可接受的值是在tf.VariableAggregation类中定义的常量。可能产生的异常:
ValueError: If both variable_def and initial_value are specified.ValueError: If the initial value is not specified, or does not have a shape and validate_shape is True.RuntimeError: If eager execution is enabled.__abs__- __abs__(
- x,
- name=None
- )
计算张量的绝对值。给定一个整数或浮点值的张量,这个操作返回一个相同类型的张量,其中每个元素都包含输入中相应元素的绝对值。给定一个复数张量x,这个操作返回一个类型为float32或float64的张量,这是x中每个元素的绝对值。x中所有的元素必须是复数形式
,绝对值为
- x = tf.constant([[-2.25 + 4.75j], [-3.25 + 5.75j]])
- tf.abs(x) # [5.25594902, 6.60492229]
参数:
返回值:
__add__- __and__(
- a,
- *args,
- **kwargs
- )
返回x和y元素的真值。
参数:
返回值:
__getitem__- __getitem__(
- var,
- slice_spec
- )
创建给定变量的切片助手对象。这允许从变量当前内容的一部分创建子张量。看到tf.Tensor。获取切片的详细示例。此外,该函数还允许对切片范围赋值。这类似于Python中的_setitem__功能。但是,语法不同,因此用户可以捕获赋值操作,以便分组或传递给ssh .run()。例如,
- import tensorflow as tf
- A = tf.Variable([[1,2,3], [4,5,6], [7,8,9]], dtype=tf.float32)
- with tf.compat.v1.Session() as sess:
- sess.run(tf.compat.v1.global_variables_initializer())
- print(sess.run(A[:2, :2])) # => [[1,2], [4,5]]
-
- op = A[:2,:2].assign(22. * tf.ones((2, 2)))
- print(sess.run(op)) # => [[22, 22, 3], [22, 22, 6], [7,8,9]]
注意,当前的赋值不支持NumPy广播语义。
参数:
返回值:
可能产生的异常:
ValueError: If a slice range is negative size.TypeError: TypeError: If the slice indices aren't int, slice, ellipsis, tf.newaxis or int32/int64 tensors.__gt__- __gt__(
- a,
- *args,
- **kwargs
- )
返回元素(x > y)的真值。
参数:
返回值:
__invert__- __invert__(
- a,
- *args,
- **kwargs
- )
返回NOT x element-wise的真值。
参数:
返回值:
__iter____iter__()
防止迭代的哑方法。不要打电话。注意(mrry):如果我们将getitem注册为一个重载操作符,Python将勇敢地尝试迭代变量的张量,从0到无穷。声明此方法可防止此意外行为。
可能产生的异常:
TypeError: when invoked.__le__- __le__(
- a,
- *args,
- **kwargs
- )
返回元素的真值(x <= y)。注意:数学。less_equal支持广播。更多关于广播
参数:
返回值:
__lt__- __lt__(
- a,
- *args,
- **kwargs
- )
返回(x < y)元素的真值。注意:math.less不支持广播。
参数:
返回值:
__matmul__- __matmul__(
- a,
- *args,
- **kwargs
- )
将矩阵a乘以矩阵b,得到a * b。在任何换位之后,输入必须是秩为>= 2的张量,其中内部2维指定有效的矩阵乘法参数,并且任何进一步的外部维度匹配。两个矩阵必须是同一类型的。支持的类型有:float16、float32、float64、int32、complex64、complex128。通过将相应的标志之一设置为True,可以动态地对矩阵进行换位或附加(共轭和换位)。这些默认为False。如果其中一个或两个矩阵包含很多0,则可以通过将相应的a_is_sparse或b_is_稀疏标志设置为True来使用更有效的乘法算法。这些默认为False。这种优化只适用于数据类型为bfloat16或float32的普通矩阵(秩为2的张量)。
例如:
- # 2-D tensor `a`
- # [[1, 2, 3],
- # [4, 5, 6]]
- a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3])
-
- # 2-D tensor `b`
- # [[ 7, 8],
- # [ 9, 10],
- # [11, 12]]
- b = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2])
-
- # `a` * `b`
- # [[ 58, 64],
- # [139, 154]]
- c = tf.matmul(a, b)
-
-
- # 3-D tensor `a`
- # [[[ 1, 2, 3],
- # [ 4, 5, 6]],
- # [[ 7, 8, 9],
- # [10, 11, 12]]]
- a = tf.constant(np.arange(1, 13, dtype=np.int32),
- shape=[2, 2, 3])
-
- # 3-D tensor `b`
- # [[[13, 14],
- # [15, 16],
- # [17, 18]],
- # [[19, 20],
- # [21, 22],
- # [23, 24]]]
- b = tf.constant(np.arange(13, 25, dtype=np.int32),
- shape=[2, 3, 2])
-
- # `a` * `b`
- # [[[ 94, 100],
- # [229, 244]],
- # [[508, 532],
- # [697, 730]]]
- c = tf.matmul(a, b)
-
- # Since python >= 3.5 the @ operator is supported (see PEP 465).
- # In TensorFlow, it simply calls the `tf.matmul()` function, so the
- # following lines are equivalent:
- d = a @ b @ [[10.], [11.]]
- d = tf.matmul(tf.matmul(a, b), [[10.], [11.]])
参数:
b:与a类型和秩相同的张量。transpose_a:如果为真,则a在乘法之前转置。transpose_a:如果为真,则b在乘法之前转置。返回值:
a[..., i, k] * b[..., k, j])。注意:这是矩阵乘积,不是元素乘。可能产生的异常:
ValueError: If transpose_a and adjoint_a, or transpose_b and adjoint_b are both set to True.__mod__- __mod__(
- a,
- *args,
- **kwargs
- )
返回除法的元素剩余部分。当x < 0 xor y < 0为真时,这符合Python语义,因为这里的结果与地板划分一致。例如,floor(x / y) * y + mod(x, y) = x。math.floormod支持广播。
参数:
返回值:
一个张量。与x类型相同。
__mul__- __mul__(
- a,
- *args,
- **kwargs
- )
为“densedensity”和“DenseSparse”分派cwise mul。
__ne____ne__(other)
逐元素比较两个变量是否相等。
__neg__- __neg__(
- a,
- *args,
- **kwargs
- )
计算数值负值元素,也就是
参数:
返回值:
一个张量。与x类型相同。
__or__- __or__(
- a,
- *args,
- **kwargs
- )
返回x或y元素的真值。注意:math.logical_or支持广播。
参数:
返回:
__pow__- __pow__(
- a,
- *args,
- **kwargs
- )
计算一个值对另一个值的幂。给定一个张量x和一个张量y,这个操作计算x和y中对应的
- x = tf.constant([[2, 2], [3, 3]])
- y = tf.constant([[8, 16], [2, 3]])
- tf.pow(x, y) # [[256, 65536], [9, 27]]
参数:
返回值:
__radd__- __radd__(
- a,
- *args,
- **kwargs
- )
为字符串添加分派,为所有其他类型添加add_v2。
__rand__- __rand__(
- a,
- *args,
- **kwargs
- )
返回x和y元素的真值。注意:math.logical_and支持广播。
参数:
返回值:
__rdiv__- __rdiv__(
- a,
- *args,
- **kwargs
- )
使用Python 2语义划分两个值。用于Tensor.div。
参数:
返回值:
__rfloordiv__- __rfloordiv__(
- a,
- *args,
- **kwargs
- )
除以x / y元素,四舍五入到最负的整数。对于整数,与tf.compat.v1.div(x,y)相同,但是对于浮点参数,使用tf.floor(tf.compat.v1.div(x,y)),因此结果总是一个整数(尽管可能是一个用浮点表示的整数)。该op由python3中的x // y层划分和python2.7中的来自于future__导入划分生成。x和y必须具有相同的类型,并且结果也必须具有相同的类型。
参数:
返回值:
__rmatmul__- __rmatmul__(
- a,
- *args,
- **kwargs
- )
将矩阵a乘以矩阵b,得到a * b。在任何换位之后,输入必须是秩为>= 2的张量,其中内部2维指定有效的矩阵乘法参数,并且任何进一步的外部维度匹配。两个矩阵必须是同一类型的。支持的类型有:float16、float32、float64、int32、complex64、complex128。通过将相应的标志之一设置为True,可以动态地对矩阵进行换位或附加(共轭和换位)。这些默认为False。如果其中一个或两个矩阵包含很多0,则可以通过将相应的a_is_sparse或b_is_稀疏标志设置为True来使用更有效的乘法算法。这些默认为False。这种优化只适用于数据类型为bfloat16或float32的普通矩阵(秩为2的张量)。
- # 2-D tensor `a`
- # [[1, 2, 3],
- # [4, 5, 6]]
- a = tf.constant([1, 2, 3, 4, 5, 6], shape=[2, 3])
-
- # 2-D tensor `b`
- # [[ 7, 8],
- # [ 9, 10],
- # [11, 12]]
- b = tf.constant([7, 8, 9, 10, 11, 12], shape=[3, 2])
-
- # `a` * `b`
- # [[ 58, 64],
- # [139, 154]]
- c = tf.matmul(a, b)
-
-
- # 3-D tensor `a`
- # [[[ 1, 2, 3],
- # [ 4, 5, 6]],
- # [[ 7, 8, 9],
- # [10, 11, 12]]]
- a = tf.constant(np.arange(1, 13, dtype=np.int32),
- shape=[2, 2, 3])
-
- # 3-D tensor `b`
- # [[[13, 14],
- # [15, 16],
- # [17, 18]],
- # [[19, 20],
- # [21, 22],
- # [23, 24]]]
- b = tf.constant(np.arange(13, 25, dtype=np.int32),
- shape=[2, 3, 2])
-
- # `a` * `b`
- # [[[ 94, 100],
- # [229, 244]],
- # [[508, 532],
- # [697, 730]]]
- c = tf.matmul(a, b)
-
- # Since python >= 3.5 the @ operator is supported (see PEP 465).
- # In TensorFlow, it simply calls the `tf.matmul()` function, so the
- # following lines are equivalent:
- d = a @ b @ [[10.], [11.]]
- d = tf.matmul(tf.matmul(a, b), [[10.], [11.]])
参数:
transpose_a:如果为真,则a在乘法之前转置。transpose_b:如果为真,则b在乘法之前转置。返回值:
注意:这是矩阵乘积,不是元素乘积。
可能产生的异常:
ValueError: If transpose_a and adjoint_a, or transpose_b and adjoint_b are both set to True.__rmod__- __rmod__(
- a,
- *args,
- **kwargs
- )
返回除法的元素剩余部分。当x < 0 xor y < 0为真时,这符合Python语义,因为这里的结果与地板划分一致。例如,floor(x / y) * y + mod(x, y) = x。floormod支持广播。更多关于广播
参数:
返回值:
__rmul__- __rmul__(
- a,
- *args,
- **kwargs
- )
为“densedensity”和“DenseSparse”分派cwise mul。
__ror__- __ror__(
- a,
- *args,
- **kwargs
- )
返回x或y元素的真值。
参数:
返回值:
__rpow__- __rpow__(
- a,
- *args,
- **kwargs
- )
计算一个值对另一个值的幂。给定一个张量x和一个张量y,这个操作计算x和y中对应的元素。
- x = tf.constant([[2, 2], [3, 3]])
- y = tf.constant([[8, 16], [2, 3]])
- tf.pow(x, y) # [[256, 65536], [9, 27]]
参数:
返回值:
__rsub__- __rsub__(
- a,
- *args,
- **kwargs
- )
返回x - y元素。注:减支持广播。
参数:
返回值:
__rtruediv__- __rtruediv__(
- a,
- *args,
- **kwargs
- )
__rxor__- __rxor__(
- a,
- *args,
- **kwargs
- )
逻辑异或函数。x ^ y = (x | y) & ~(x & y)输入为张量,如果张量包含多个元素,则计算元素逻辑XOR。
用法:
- x = tf.constant([False, False, True, True], dtype = tf.bool)
- y = tf.constant([False, True, False, True], dtype = tf.bool)
- z = tf.logical_xor(x, y, name="LogicalXor")
- # here z = [False True True False]
参数:
返回值:
assign- assign(
- value,
- use_locking=False,
- name=None,
- read_value=True
- )
为变量分配一个新值。这本质上是赋值(self, value)的快捷方式。
参数:
value:一个张量。这个变量的新值。返回:
assign_add- assign_add(
- delta,
- use_locking=False,
- name=None,
- read_value=True
- )
为该变量添加一个值。这实际上是assign_add(self, delta)的快捷方式。
参数:
delta:张量。要添加到此变量的值。返回值:
assign_sub- assign_sub(
- delta,
- use_locking=False,
- name=None,
- read_value=True
- )
从这个变量中减去一个值。这实际上是assign_sub(self, delta)的快捷方式。
参数:
delta:张量。从这个变量中减去的值。返回值:
batch_scatter_update- batch_scatter_update(
- sparse_delta,
- use_locking=False,
- name=None
- )
类似于批量收集。indexedslice按批处理方式指向此变量。类似于batch_gather。这假设这个变量和sparse_delta indexedslice有一系列对它们都相同的主导维度,并且更新是在索引的最后一个维度上执行的。换句话说,维度应该如下:num_prefix_dims = sparse_delta. indexes。batch_dim = num_prefix_dims + 1 sparse_delta.updates。= sparse_delta.indices形状。shape + var.shape[batch_dim:],其中更新了sparse_delta.updates。[:num_prefix_dims] = = sparse_delta.indices形状。shape[:num_prefix_dims] == var.shape[:num_prefix_dims],所执行的操作可以表示为:var[i_1,…、i_n sparse_delta。指数(i_1,……, i_n, j]] = sparse_delta。更新(i_1,……, i_n, j]。指标是一维张量,这个操作等价于scatter_update。为了避免这种操作,可以循环遍历变量的第一个ndims,并对分割第一个维度的子张量使用scatter_update。对于ndims = 1,这是一个有效的选项,但是比这个实现的效率要低。
参数:
返回值:
可能产生的异常:
TypeError: if sparse_delta is not an IndexedSlices.count_up_tocount_up_to(limit)
递增此变量,直到它达到极限。(不推荐)当运行Op时,它试图将变量增加1。如果增加变量会使其超过限制,那么Op将抛出异常OutOfRangeError。如果没有引起错误,Op将在增量之前输出变量的值。这实际上是count_up_to(self, limit)的快捷方式。
参数:
返回值:
evaleval(session=None)
在会话中,计算并返回此变量的值。这不是一个图形构造方法,它不向图形添加ops。这个方便的方法需要一个会话,其中包含这个变量的图已经启动。如果没有传递会话,则使用默认会话。有关启动图表和会话的更多信息,请参见tf.compat.v1.Session。
- v = tf.Variable([1, 2])
- init = tf.compat.v1.global_variables_initializer()
-
- with tf.compat.v1.Session() as sess:
- sess.run(init)
- # Usage passing the session explicitly.
- print(v.eval(sess))
- # Usage with the default session. The 'with' block
- # above makes 'sess' the default session.
- print(v.eval())
参数:
返回值:
experimental_refexperimental_ref()
返回此变量的可刷新引用对象。这个API的主要用途是将变量放在set/dictionary中。我们不能把变量放在set/dictionary中,因为变量变量在启动Tensorflow 2.0时不再可用。
- import tensorflow as tf
-
- x = tf.Variable(5)
- y = tf.Variable(10)
- z = tf.Variable(10)
-
- # The followings will raise an exception starting 2.0
- # TypeError: Variable is unhashable if Variable equality is enabled.
- variable_set = {x, y, z}
- variable_dict = {x: 'five', y: 'ten'}
相反,我们可以使用variable.experimental al_ref()。
- variable_set = {x.experimental_ref(),
- y.experimental_ref(),
- z.experimental_ref()}
-
- print(x.experimental_ref() in variable_set)
- ==> True
-
- variable_dict = {x.experimental_ref(): 'five',
- y.experimental_ref(): 'ten',
- z.experimental_ref(): 'ten'}
-
- print(variable_dict[y.experimental_ref()])
- ==> ten
此外,reference对象提供.deref()函数,该函数返回原始变量。
- x = tf.Variable(5)
- print(x.experimental_ref().deref())
- ==>
'Variable:0' shape=() dtype=int32, numpy=5>
from_proto- @staticmethod
- from_proto(
- variable_def,
- import_scope=None
- )
返回一个由variable_def创建的变量对象。
gather_nd- gather_nd(
- indices,
- name=None
- )
将params中的切片收集到一个由指标指定形状的张量中。
参数:
indices:一个张量。必须是下列类型之一:int32、int64。指数张量。返回值:
get_shapeget_shape()
Variable.shape的别名。
initialized_valueinitialized_value()
返回初始化变量的值。(弃用)。你应该使用它而不是变量本身来初始化另一个变量,该变量的值取决于该变量的值。
- # Initialize 'v' with a random tensor.
- v = tf.Variable(tf.random.truncated_normal([10, 40]))
- # Use `initialized_value` to guarantee that `v` has been
- # initialized before its value is used to initialize `w`.
- # The random values are picked only once.
- w = tf.Variable(v.initialized_value() * 2.0)
返回值:
load- load(
- value,
- session=None
- )
将新值加载到该变量中。(弃用)警告:不推荐使用此函数。它将在未来的版本中被删除。更新说明:首选变量。在2.X中具有相同行为的赋值。将新值写入变量的内存。没有向图中添加ops。这个方便的方法需要一个会话,其中包含这个变量的图已经启动。如果没有传递会话,则使用默认会话。有关启动图表和会话的更多信息,请参见tf.compat.v1.Session。
- v = tf.Variable([1, 2])
- init = tf.compat.v1.global_variables_initializer()
-
- with tf.compat.v1.Session() as sess:
- sess.run(init)
- # Usage passing the session explicitly.
- v.load([2, 3], sess)
- print(v.eval(sess)) # prints [2 3]
- # Usage with the default session. The 'with' block
- # above makes 'sess' the default session.
- v.load([3, 4], sess)
- print(v.eval()) # prints [3 4]
参数:
value:新变量值可能产生的异常:
ValueError: Session is not passed and no default sessionread_valueread_value()
返回在当前上下文中读取的此变量的值。与value()不同,如果它在另一个设备上,具有控件依赖关系,等等。
返回值:
scatter_add- scatter_add(
- sparse_delta,
- use_locking=False,
- name=None
- )
参数:
返回值:
可能产生的异常:
TypeError: if sparse_delta is not an IndexedSlices.scatter_div- scatter_div(
- sparse_delta,
- use_locking=False,
- name=None
- )
将这个变量除以tf. indexedslice。
参数:
返回值:
可能产生的异常:
TypeError: if sparse_delta is not an IndexedSlices.scatter_max- scatter_max(
- sparse_delta,
- use_locking=False,
- name=None
- )
用tf的最大值更新此变量。IndexedSlices和本身。
参数:
返回值:
可能产生的异常:
TypeError: if sparse_delta is not an IndexedSlices.scatter_min- scatter_min(
- sparse_delta,
- use_locking=False,
- name=None
- )
用tf的最小值更新这个变量。IndexedSlices和本身。
参数:
返回值:
可能产生的异常:
TypeError: if sparse_delta is not an IndexedSlices.scatter_mul- scatter_mul(
- sparse_delta,
- use_locking=False,
- name=None
- )
将这个变量乘以tf. indexedslice。
将这个变量乘以tf. indexedslice。
参数:
返回值:
可能产生的异常:
TypeError: if sparse_delta is not an IndexedSlices.scatter_nd_add- scatter_nd_add(
- indices,
- updates,
- name=None
- )
对变量中的单个值或片应用稀疏加法。变量的秩为P,指标是秩为q的张量。指标必须是整数张量,包含自指标。它必须是shape [d_0,…, d_{Q-2}, K],其中0 < K <= P。索引的最内层维度(长度为K)对应于沿着self的第K个维度的元素索引(如果K = P)或切片索引(如果K < P)。更新量为Q-1+P-K阶张量,形状为:
[d_0, ..., d_{Q-2}, self.shape[K], ..., self.shape[P-1]].
例如,我们想把4个散射元素加到一个秩为1的张量到8个元素上。在Python中,更新应该是这样的:
- v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
- indices = tf.constant([[4], [3], [1] ,[7]])
- updates = tf.constant([9, 10, 11, 12])
- add = v.scatter_nd_add(indices, updates)
- with tf.compat.v1.Session() as sess:
- print sess.run(add)
v的最终更新如下:
[1, 13, 3, 14, 14, 6, 7, 20]
有关如何更新片的详细信息,请参阅scatter_nd。
参数:
indices:用于操作的索引。updates:操作中使用的值。返回值:
scatter_nd_sub- scatter_nd_sub(
- indices,
- updates,
- name=None
- )
假设变量的秩为P,指标是秩为q的张量,指标必须是整数张量,包含自指标。它必须是shape [d_0,…, d_{Q-2}, K],其中0 < K <= P。索引的最内层维度(长度为K)对应于沿着self的第K个维度的元素索引(如果K = P)或切片索引(如果K < P)。更新量为Q-1+P-K阶张量,形状为:
[d_0, ..., d_{Q-2}, self.shape[K], ..., self.shape[P-1]].
例如,我们想把4个散射元素加到一个秩为1的张量到8个元素上。在Python中,更新应该是这样的:
- v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
- indices = tf.constant([[4], [3], [1] ,[7]])
- updates = tf.constant([9, 10, 11, 12])
- op = v.scatter_nd_sub(indices, updates)
- with tf.compat.v1.Session() as sess:
- print sess.run(op)
v的最终更新如下:
[1, -9, 3, -6, -6, 6, 7, -4]
有关如何更新片的详细信息,请参阅scatter_nd。
参数:
indices:用于操作的索引。updates:操作中使用的值。返回值:
scatter_nd_update- scatter_nd_update(
- indices,
- updates,
- name=None
- )
对变量中的单个值或片应用稀疏赋值。变量的秩为P,指标是秩为q的张量。指标必须是整数张量,包含自指标。它必须是shape [d_0,…, d_{Q-2}, K],其中0 < K <= P。索引的最内层维度(长度为K)对应于沿着self的第K个维度的元素索引(如果K = P)或切片索引(如果K < P)。更新量为Q-1+P-K阶张量,形状为:
[d_0, ..., d_{Q-2}, self.shape[K], ..., self.shape[P-1]].
例如,我们想把4个散射元素加到一个秩为1的张量到8个元素上。在Python中,更新应该是这样的:
- v = tf.Variable([1, 2, 3, 4, 5, 6, 7, 8])
- indices = tf.constant([[4], [3], [1] ,[7]])
- updates = tf.constant([9, 10, 11, 12])
- op = v.scatter_nd_assign(indices, updates)
- with tf.compat.v1.Session() as sess:
- print sess.run(op)
v的最终更新如下:
[1, 11, 3, 10, 9, 6, 7, 12]
有关如何更新片的详细信息,请参阅scatter_nd。
参数:
indices:用于操作的索引。updates:操作中使用的值。返回值:
scatter_sub- scatter_sub(
- sparse_delta,
- use_locking=False,
- name=None
- )
从这个变量索引切片。
参数:
返回值:
可能产生的异常:
TypeError: if sparse_delta is not an IndexedSlices.scatter_update- scatter_update(
- sparse_delta,
- use_locking=False,
- name=None
- )
indexedslice指向这个变量。
参数值:
返回值:
可能产生的异常:
TypeError: if sparse_delta is not an IndexedSlices.set_shapeset_shape(shape)
覆盖此变量的形状。
参数:
sparse_read- sparse_read(
- indices,
- name=None
- )
根据索引从params坐标轴中收集切片。这个函数支持tf的一个子集。收集,请参阅特遣部队。
参数:
indices:指标张量。必须是下列类型之一:int32、int64。必须在range [0, params.shape[axis]]中。返回值:
to_prototo_proto(export_scope=None)
将变量转换为VariableDef协议缓冲区。
参数:
返回值:
valuevalue()
返回此变量的最后一个快照。通常不需要调用这个方法,因为所有需要变量值的ops都会通过调用convert_to_张量()自动调用它。返回一个包含变量值的张量。你不能给这个张量赋一个新的值,因为它不是对变量的引用。为了避免复制,如果返回值的使用者与变量位于相同的设备上,那么实际上将返回变量的活动值,而不是复制。消费者可以看到变量的更新。如果使用者在不同的设备上,它将获得变量的副本。
返回值: