ScatterUpdate

Versioned name: ScatterUpdate-3

Category: Data movement operations

Short description: ScatterUpdate creates a copy of the first input tensor with updated elements specified with second and third input tensors.

Detailed description: ScatterUpdate creates a copy of the first input tensor with updated elements in positions specified with indices input and values specified with updates tensor starting from the dimension with index axis. For the data tensor of shape [d_0, d_1, ..., d_n], indices tensor of shape [i_0, i_1, ..., i_k] and updates tensor of shape [d_0, d_1, ... d_(axis - 1), i_0, i_1, ..., i_k, d_(axis + k + 1), ..., d_n] the operation computes for each m, n, ..., p of the indices tensor indices:

data[..., indices[m, n, ..., p], ...] = updates[..., m, n, ..., p, ...]

where first ... in the data corresponds to first axis dimensions, last ... in the data corresponds to the rank(data) - (axis + 1) dimensions.

Several examples for case when axis = 0:

  1. indices is a 0D tensor: data[indices, ...] = updates[...]
  2. indices is a 1D tensor (for each i): data[indices[i], ...] = updates[i, ...]
  3. indices is a ND tensor (for each i, ..., j): data[indices[i, ..., j], ...] = updates[i, ..., j, ...]

This operation is similar to TensorFlow* operation ScatterUpdate but allows scattering for the arbitrary axis.

Attributes: ScatterUpdate does not have attributes.

Inputs:

Outputs:

Types

Example

<layer ... type="ScatterUpdate">
<input>
<port id="0">
<dim>1000</dim>
<dim>256</dim>
<dim>10</dim>
<dim>15</dim>
</port>
<port id="1">
<dim>125</dim>
<dim>20</dim>
</port>
<port id="2">
<dim>1000</dim>
<dim>125</dim>
<dim>20</dim>
<dim>10</dim>
<dim>15</dim>
</port>
<port id="3">
<dim>1</dim>
</port>
</input>
<output>
<port id="4" precision="FP32">
<dim>1000</dim>
<dim>256</dim>
<dim>10</dim>
<dim>15</dim>
</port>
</output>
</layer>