article thumbnail image
2022. 11. 7. 13:50
728x90

Reshape

Reshape은 Tensor의 shape을 변경하는 operation이다. 원소는 그대로 두고 shape의 모양만 바꿔준다.

Reshape은 원소의 배열 순서를 바꾸지도, 원소의 갯수를 늘리거나 줄이지도 않는다.

예제

[[1, 2, 3],
 [4, 5, 6]]

위와 같은 Tensor가 있다고 할 때, Tensor의 Shape은 (2, 3)이다.

2차원 -> 1차원

위의 Tensor를 reshape(tensor, [6])과 같이 1차원으로 만들면,

[1, 2, 3, 4, 5, 6]

2차원 -> 2차원

위의 (2, 3) Tensor를 reshape(tensor, [3, 2])와 같이 2차원의 다른 모양으로 만들면,

[[1, 2],
 [3, 4],
 [5, 6]]

데이터 배열 순서를 그대로 유지하고 3개씩 2개의 묶음으로 되어 있던 것을 2개씩 3개의 묶음으로 처리하기만 하면 된다.

3차원->2차원

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

위와 같이 (2, 2, 3) Tensor가 있을 때, 이를 (4, 3) Tensor로 reshape을 하면,

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

C, H, W 각각이 2, 2, 3 이던 것이 C*H, W로 변하게 되면서 (4, 3) Tensor로 변하게 된다.

예제를 모두 살펴보면 1, 2, 3, ... 의 순서는 변하지 않는다.

Special value, -1

shape 지정 값에 -1이 포함되는 경우가 있다. 이 경우 전체 크기를 바탕으로 해당 차원은 자동으로 계산된다.

[[1, 2, 3],
 [4, 5, 6]]

위의 예제에서 reshape(tensor, [-1]) 과 같이 변형해보면, 아래와 같이 1차원으로 바뀌게 된다. 또한 총 크기가 유지되어야 하므로 -1 대신에 계산된 6으로 대체된다.

[1, 2, 3, 4, 5, 6]
728x90
복사했습니다!