阅读(619)
赞(19)
TensorFlow变量函数:tf.scatter_nd_add
2018-01-05 10:32:13 更新
tf.scatter_nd_add 函数
scatter_nd_add(
ref,
indices,
updates,
use_locking=False,
name=None
)
请参阅指南:变量>稀疏变量更新
在updates和单个值或切片之间应用稀疏加法,根据indices在给定的变量内.
ref是一个秩为P的Tensor,indices是一个秩为Q的Tensor.
indices必须是整数张量,包含索引到ref.它一定有形状:[d_0, ..., d_{Q-2}, K],并且是:0<K<=P.
indices(具有长度K)的最内部维度对应于沿着ref的K维度的元素(if K = P)或切片(if K < P)的索引.
updates是具有形状的秩为Q-1+P-K的Tensor:
[d_0, ..., d_{Q-2}, ref.shape[K], ..., ref.shape[P-1]].
例如, 假设我们要将4分散的元素添加到 rank-1 张量到8元素.在 Python 中, 添加的内容如下所示:
ref = 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 = tf.scatter_nd_add(ref, indices, updates)
with tf.Session() as sess:
print sess.run(add)
对ref的结果更新如下所示:
[1, 13, 3, 14, 14, 6, 7, 20]
请参阅tf.scatter_nd有关如何更新切片的更多详细信息.
函数参数
- ref:一个可变的Tensor;必须是下列类型之一:float32,float64,int64,int32,uint8,uint16,int16,int8,complex64,complex128,qint8,quint8,qint32,half;一个可变的张量;应该来自一个变量节点.
- indices:一个Tensor.必须是以下类型之一:int32,int64.索引到ref的一个张量.
- updates:一个Tensor.必须与ref具有相同的类型.添加到ref的更新值的张量.
- use_locking:可选的bool;如果为True,则赋值将受锁定的保护;否则行为是不确定的,但可能表现出较少的争用.
- name:操作的名称(可选).
函数返回值
tf.scatter_nd_add函数返回一个可变的Tensor;与ref有相同的类型;与 ref 一样,返回为希望在更新完成后使用更新的值的操作的方便性.