텐서플로우:: ops:: BatchToSpaceND

#include <array_ops.h>

T 타입의 ND 텐서에 대한 BatchToSpace.

요약

이 연산은 "배치" 차원 0을 block_shape + [batch] 형태의 M + 1 차원으로 재구성하고, 이러한 블록들을 공간 차원 [1, ..., M] 으로 정의된 그리드에 다시 삽입하여 입력과 동일한 랭크의 결과를 얻습니다. 이 중간 결과의 공간 차원은 필요에 따라 crops 에 따라 잘라내어 최종 출력을 생성합니다. 이는 SpaceToBatch의 역연산입니다. 자세한 설명은 아래를 참조하십시오.

논거:

  • 범위: Scope 객체
  • 입력: ND는 input_shape = [batch] + spatial_shape + remaining_shape 형태를 가지며, spatial_shape는 M차원을 갖습니다.
  • block_shape: 모양이 [M] 인 1차원, 모든 값은 1 이상이어야 합니다.
  • crops: 2차원, 모양 [M, 2] , 모든 값은 0 이상이어야 합니다 crops[i] = [crop_start, crop_end] 는 입력 차원 i + 1 (공간 차원 i 에 해당)에서 자를 양을 지정합니다. crop_start[i] + crop_end[i] <= block_shape[i] * input_shape[i + 1] 이어야 합니다.

이 작업은 다음 단계와 동일합니다.

  1. input [block_shape[0], ..., block_shape[M-1], batch / prod(block_shape), input_shape[1], ..., input_shape[N-1]]의 형태로 reshaped 합니다.
  2. reshaped 된 차원을 permuted 하여 [batch / prod(block_shape),input_shape[1], block_shape[0], ..., input_shape[M], block_shape[M-1],input_shape[M+1], ..., input_shape[N-1]] 형태의 순열을 생성합니다.
  3. [batch / prod(block_shape),input_shape[1] * block_shape reshaped_permuted 0], ..., input_shape[M] * block_shape[M-1],input_shape[M+1], ..., input_shape[N-1]] 형태 permuted reshaped_permuted를 생성하기 위해 순열을 적용합니다.
  4. reshaped_permuted 순열의 차원 [1, ..., M] 의 시작과 끝 부분을 crops 에 따라 잘라내어 다음과 같은 형태의 출력을 생성합니다: [batch / prod(block_shape),input_shape[1] * block_shape[0] - crops[0,0] - crops[0,1], ..., input_shape[M] * block_shape[M-1] - crops[M-1,0] - crops[M-1,1],input_shape[M+1], ..., input_shape[N-1]]

몇 가지 예를 들면 다음과 같습니다.

(1) 다음 입력의 형태가 [4, 1, 1, 1] 이고 block_shape = [2, 2] 이며 crops = [[0, 0], [0, 0]] 인 경우:

[[[[1]]], [[[2]]], [[[3]]], [[[4]]]]

출력 텐서의 형태는 [1, 2, 2, 1] 이며 값은 다음과 같습니다.

x = [[[[1], [2]], [[3], [4]]]]

(2) 다음 입력의 형태가 [4, 1, 1, 3] 이고 block_shape = [2, 2] 이며 crops = [[0, 0], [0, 0]] 인 경우:

[[[[1, 2, 3]]], [[[4, 5, 6]]], [[[7, 8, 9]]], [[[10, 11, 12]]]]

출력 텐서의 형태는 [1, 2, 2, 3] 이고 값은 다음과 같습니다.

x = [[[[1, 2, 3], [4, 5, 6]],
      [[7, 8, 9], [10, 11, 12]]]]

(3) 다음 입력의 형태가 [4, 2, 2, 1] 인 경우 block_shape = [2, 2] 이고 crops = [[0, 0], [0, 0]] 입니다.

x = [[[[1], [3]], [[9], [11]]],
     [[[2], [4]], [[10], [12]]],
     [[[5], [7]], [[13], [15]]],
     [[[6], [8]], [[14], [16]]]]

출력 텐서의 형태는 [1, 4, 4, 1] 이며 값은 다음과 같습니다.

x = [[[[1],   [2],  [3],  [4]],
     [[5],   [6],  [7],  [8]],
     [[9],  [10], [11],  [12]],
     [[13], [14], [15],  [16]]]]

(4) 다음 입력의 형태는 [8, 1, 3, 1] 이고 block_shape = [2, 2] 이며 crops = [[0, 0], [2, 0]] 입니다.

x = [[[[0], [1], [3]]], [[[0], [9], [11]]],
     [[[0], [2], [4]]], [[[0], [10], [12]]],
     [[[0], [5], [7]]], [[[0], [13], [15]]],
     [[[0], [6], [8]]], [[[0], [14], [16]]]]

출력 텐서의 형태는 [2, 2, 4, 1] 이고 값은 다음과 같습니다.

x = [[[[1],   [2],  [3],  [4]],
      [[5],   [6],  [7],  [8]]],
     [[[9],  [10], [11],  [12]],
      [[13], [14], [15],  [16]]]]

보고:

생성자와 소멸자

BatchToSpaceND (const :: tensorflow::Scope & scope, :: tensorflow::Input input, :: tensorflow::Input block_shape, :: tensorflow::Input crops)

공개 속성

operation
output

공공 기능

node () const
::tensorflow::Node *
operator::tensorflow::Input () const
operator::tensorflow::Output () const

공개 속성

작업

Operation operation

산출

::tensorflow::Output output

공공 기능

배치투스페이스ND

 BatchToSpaceND(
  const ::tensorflow::Scope & scope,
  ::tensorflow::Input input,
  ::tensorflow::Input block_shape,
  ::tensorflow::Input crops
)

마디

::tensorflow::Node * node() const 

연산자::텐서플로우::입력

 operator::tensorflow::Input() const 

연산자::텐서플로우::출력

 operator::tensorflow::Output() const