티스토리 뷰

728x90

pytorch tensor를 이용하다보면, a,b,c tensor를 하나로 합치는 경우가 필요하다.

그때 사용하는 것은 concat, stack 함수를 이용해서 사용하면 될텐데... 조금의 차이가 존재한다.

 

예시를 통해 정리해보고자 한다.

 

1. concat

- pandas를 자주 사용하는 개발자들은 pd.concat을 종종 사용할 것이다. 이때 concat이 torch에도 같다고 생각하면 된다.

한마디로 정리하자면, concat은 기존 shape을 유지한다.

 

예제를 보자.

x = [[1,2], [3,4]] / y = [[4,5],[6,7]] 를 선언하였다.

shape은 (2,2) 이다. shape을 잘 기억하길 바란다.

 

단순 concat을 진행하게 되면, defalut = dim 0 이므로 세번째 처럼 나란히 연결되는 것을 볼 수 있다.

shape을 보면.. [4,2] 가 되었다. 즉, shape의 차원은 바뀌지 않았다(2차). 이게 중요하다.

 

dim = 1은 '열' 끼리 합치라는 뜻이므로 네번째처럼 구성되는 것을 볼 수 있다. 여기서 shape의 차수는 여전히 2차원이다.

 

concat의 가장 중요한 점은 shape의 차수이다.

다음 stack을 살펴보자.

같은 예제이지만, concat 대신 stack으로 진행하였다.

얼핏보면 결과가 같아보이지만 shape을 잘 살펴보길 바란다.

concat은 2차원 > 2차원으로 고정이였지만, stack은 2차원 > 3차원이 되었다!!!

stack은 차원 수를 늘려 형태를 바꾸지 않고 있는 그대로 concat이 된다.

즉, 데이터를 쌓기위해 저장소가 하나 필요하다고 보면 된다.

 

그 외 dim의 차이도 보자면, dim 0은 defalut로 행을 기준으로 쌓게 되지만,

dim 1은 열을 기준으로 쌓기때문에 4번째 사진처럼 된다.

dim은 헷갈리니 잘 생각해보길 바란다.

 

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함