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