ScatterNd

공개 최종 클래스 ScatterNd

'인덱스'에 따라 '업데이트'를 모양 'shape'의 텐서로 분산시킵니다.

지정된 `인덱스`의 개별 값에 따라 희소 `업데이트`를 분산시킵니다. 이 작업은 사용자가 지정한 '모양'을 가진 출력 텐서를 반환합니다. 이 작업은 주어진 텐서에서 값이나 조각을 추출하는 tf.gather_nd 연산자의 반대입니다.

이 작업은 텐서가 0으로 초기화된다는 점을 제외하면 tf.tensor_scatter_nd_add 와 유사합니다. tf.scatter_nd(indices, updates, shape) 호출하는 것은 `tf.tensor_scatter_nd_add(tf.zeros(shape, presents.dtype), indices, presents)`를 호출하는 것과 동일하다

'인덱스'에 중복 항목이 포함된 경우 관련 '업데이트'가 출력 텐서에 누적(합계)됩니다.

경고 : 부동 소수점 데이터 유형의 경우 출력이 비결정적일 수 있습니다. 이는 업데이트가 적용되는 순서가 비결정적이며 부동 소수점 숫자가 다른 순서로 추가되면 결과 수치 근사 오류가 약간 다를 수 있기 때문입니다. 그러나 tf.config.experimental.enable_op_determinism 통해 작업 결정론이 활성화된 경우 출력은 결정론적입니다.

`indices`는 출력 텐서에 대한 인덱스를 포함하는 정수 텐서입니다. `indices`의 마지막 차원은 기껏해야 `shape`의 순위일 수 있습니다.

indices.shape[-1] <= 모양.순위

`indices`의 마지막 차원은 `indices.shape[-1] = shape.rank`인 경우 요소의 인덱스 또는 `indices.shape[-1] <shape.rank`인 경우 차원 `indices에 따른 조각(`indices.shape[-1] <shape.rank`인 경우)에 해당합니다. .shape[-1]` '모양'.

`updates`는 다음과 같은 형태의 텐서입니다.

indices.shape[:-1] + 모양[indices.shape[-1]:]

분산 연산의 가장 간단한 형태는 인덱스를 기준으로 텐서에 개별 요소를 삽입하는 것입니다. 8개의 요소가 있는 랭크 1 텐서에 4개의 분산된 요소를 삽입하려는 예를 생각해 보세요.

Python에서 이 분산 연산은 다음과 같습니다:

indices = tf.constant([[4], [3], [1], [7]])
     updates = tf.constant([9, 10, 11, 12])
     shape = tf.constant([8])
     scatter = tf.scatter_nd(indices, updates, shape)
     print(scatter)
 
결과 텐서는 다음과 같습니다.

[0, 11, 0, 10, 9, 0, 0, 12]

더 높은 순위의 텐서 전체 조각을 한 번에 삽입할 수도 있습니다. 예를 들어, 새 값의 행렬 두 개를 사용하여 순위 3 텐서의 첫 번째 차원에 두 개의 조각을 삽입할 수 있습니다.

Python에서 이 분산 연산은 다음과 같습니다:

indices = tf.constant([[1], [3]])
     updates = tf.constant([[[5, 5, 5, 5], [6, 6, 6, 6],
                             [7, 7, 7, 7], [8, 8, 8, 8]],
                            [[5, 5, 5, 5], [6, 6, 6, 6],
                             [7, 7, 7, 7], [8, 8, 8, 8]]])
     shape = tf.constant([4, 4, 4])
     scatter = tf.scatter_nd(indices, updates, shape)
     print(scatter)
 
결과 텐서는 다음과 같습니다.

[[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[5, 5, 5 , 5], [6, 6, 6, 6], [7, 7, 7, 7], [8, 8, 8, 8]], [[0, 0, 0, 0], [0, 0 , 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]], [[5, 5, 5, 5], [6, 6, 6, 6], [7 , 7, 7, 7], [8, 8, 8, 8]]]

CPU에서 범위를 벗어난 인덱스가 발견되면 오류가 반환됩니다. GPU에서는 범위를 벗어난 인덱스가 발견되면 해당 인덱스가 무시됩니다.

공개 방법

출력 <U>
출력 ()
텐서의 기호 핸들을 반환합니다.
static <U, T 확장 숫자> ScatterNd <U>
생성 ( 범위 범위, 피연산자 <T> 인덱스, 피연산자 <U> 업데이트, 피연산자 <T> 모양)
새로운 ScatterNd 작업을 래핑하는 클래스를 생성하는 팩토리 메서드입니다.
출력 <U>
출력 ()
주어진 형태와 인덱스에 따라 업데이트가 적용된 새로운 텐서.

상속된 메서드

공개 방법

공개 출력 <U> asOutput ()

텐서의 기호 핸들을 반환합니다.

TensorFlow 작업에 대한 입력은 다른 TensorFlow 작업의 출력입니다. 이 메서드는 입력 계산을 나타내는 기호 핸들을 얻는 데 사용됩니다.

public static ScatterNd <U> create ( 범위 범위 , 피연산자 <T> 인덱스, 피연산자 <U> 업데이트, 피연산자 <T> 모양)

새로운 ScatterNd 작업을 래핑하는 클래스를 생성하는 팩토리 메서드입니다.

매개변수
범위 현재 범위
지수 인덱스의 텐서.
업데이트 출력 텐서에 분산시킬 값입니다.
모양 1-D. 출력 텐서의 모양입니다.
보고
  • ScatterNd의 새 인스턴스

공개 출력 <U> 출력 ()

주어진 형태와 인덱스에 따라 업데이트가 적용된 새로운 텐서.