ScatterNDUpdate¶
Versioned name: ScatterNDUpdate-3
Category: Data movement
Short description: Creates a copy of the first input tensor with updated elements specified with second and third input tensors.
Detailed description: The operation produces a copy of data tensor and updates its value to values specified
by updates at specific index positions specified by indices. The output shape is the same as the shape of data.
indices tensor must not have duplicate entries. In case of duplicate entries in indices the result is undefined.
The last dimension of indices can be at most the rank of data.shape.
The last dimension of indices corresponds to indices into elements if indices.shape[-1] = data.shape.rank or slices
if indices.shape[-1] < data.shape.rank. updates is a tensor with shape indices.shape[:-1] + data.shape[indices.shape[-1]:]
Example 1 that shows update of four single elements in data:
data = [1, 2, 3, 4, 5, 6, 7, 8]
indices = [[4], [3], [1], [7]]
updates = [9, 10, 11, 12]
output = [1, 11, 3, 10, 9, 6, 7, 12]
Example 2 that shows update of two slices of 4x4 shape in data:
data = [[[1, 2, 3, 4], [5, 6, 7, 8], [8, 7, 6, 5], [4, 3, 2, 1]],
[[1, 2, 3, 4], [5, 6, 7, 8], [8, 7, 6, 5], [4, 3, 2, 1]],
[[8, 7, 6, 5], [4, 3, 2, 1], [1, 2, 3, 4], [5, 6, 7, 8]],
[[8, 7, 6, 5], [4, 3, 2, 1], [1, 2, 3, 4], [5, 6, 7, 8]]]
indices = [[0], [2]]
updates = [[[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]],
[[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]]]
output = [[[5, 5, 5, 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]],
[[1, 2, 3, 4], [5, 6, 7, 8], [8, 7, 6, 5], [4, 3, 2, 1]],
[[1, 1, 1, 1], [2, 2, 2, 2], [3, 3, 3, 3], [4, 4, 4, 4]],
[[8, 7, 6, 5], [4, 3, 2, 1], [1, 2, 3, 4], [5, 6, 7, 8]]]
Attributes: ScatterNDUpdate does not have attributes.
Inputs:
1:
datatensor of arbitrary rankr>= 1 and of type T. Required.2:
indicestensor with indices of arbitrary rankq>= 1 and of type T_IND. All index valuesi_jin index entry(i_0, i_1, ...,i_k)(wherek = indices.shape[-1]) must be within bounds[0, s_j - 1]wheres_j = data.shape[j].kmust be at mostr. Required.3:
updatestensor of rankr - indices.shape[-1] + q - 1of type T. If expectedupdatesrank is 0D it can be a tensor with single element. Required.
Outputs:
1: tensor with shape equal to
datatensor of the type T.
Types
T: any numeric type.
T_IND:
int32orint64
Example
<layer ... type="ScatterNDUpdate">
<input>
<port id="0">
<dim>1000</dim>
<dim>256</dim>
<dim>10</dim>
<dim>15</dim>
</port>
<port id="1">
<dim>25</dim>
<dim>125</dim>
<dim>3</dim>
</port>
<port id="2">
<dim>25</dim>
<dim>125</dim>
<dim>15</dim>
</port>
</input>
<output>
<port id="3">
<dim>1000</dim>
<dim>256</dim>
<dim>10</dim>
<dim>15</dim>
</port>
</output>
</layer>