반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석, 머신러닝 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 


 

오늘은 딥러닝을 공부하기 위해서 필요한 선형대수학의 기본개념 잠시 정리하는 시간을 가져보려 합니다.

 

우선 벡터와 행렬에 대해서 어느정도 본적이 있고, 대충 무엇인지는 아신다는 전제로 설명을 해보겠습니다.

 

1. 벡터, 행렬, 텐서의 개념

 

출처. 파이토치로 시작하는 딥러닝 기초 (부스트코스 강의)

 

제가 공부를 시작한 Pytorch 라이브러리에는 텐서(Tensor)라는 개념이 나오는데요. 이 텐서라는 것이 생소하지만 그렇다고 이해 못할 정도로 어려운 개념은 아닙니다.

 

텐서는 예전에 배웠던 Numpy의 ndarray와 거의 같으므로 ndarray로 설명드려 보겠습니다.

 

ndarray는 numpy의 가장 기본적인 구조로 1D array(벡터), 2D array(행렬), 3D array(텐서)와 같은 데이터 구조를 가집니다.

참고로 ndarray라는 말은 n dimension array의 줄임말입니다.

 

출처.  https://velog.io/@mingki

 

여기서 알아두셔야 할 개념이 있는데 바로 axis와 shape입니다.

axis shape
기준이 되는 축으로 축의 갯수는 차원과 같음


(axis 0) = 1D array = 1D Tensor
(axis0, axis 1) = 2D array = 2D Tensor
(axis0, axis1, axis 2) = 3D array = 3D Tensor

배열의 차원과 크기 정보



(3, ) = 3의 shape(=size)
(4,3) = 4x3의 shape(=size)
(2,5,3) = 2x5x3의 shape(=size)

 

앞으로 Pytorch를 다룰 때에는 array를 Tensor로 바꿔서 생각하시면 됩니다.

그리고 shape의 개념은 Numpy와 Pytorch 모두 사용하며, shape는 size와 같은 의미입니다.

 

 

2. axis와 shape(size) 헷갈리지 않는 법

 

제가 배열을 파이썬 코딩으로 구현할 때, 항상 헷갈리던게 있어서 팁을 공유해보려 합니다.

 

바로 텐서의 size와 axis가 실제 코드와 매칭이 잘 되지 않는 문제였는데요.

 

사실 텐서의 차원(dimension)이나 크기(size)를 파악하는 함수가 따로 있어서 코딩 한 줄이면 파악 가능하지만, 추후에 텐서의 차원과 형태를 바꿔주는 함수를 사용할 때, 제가 알려드리는 팁을 이용하면 조금 더 편하실 거라고 생각합니다.

 

한 번 차근차근 함께 알아보겠습니다.

 

이 텐서는 1차원 텐서입니다. 당연히 사이즈는 3이겠죠? 문제는 2차원 이상부터인데요.

 

이 텐서의 사이즈가 (3,2)인가요? 아니면 (2,3)일까요?

 

정답은 (2,3)입니다. 판단하는 방법은 '가장 바깥쪽의 괄호가 axis 0, 즉 사이즈 가장 앞의 숫자인 것입니다.

 

좀 더 풀어서 설명하자면 [1, 2, 3]와 [4, 5, 6] 2개가 가장 바깥 대괄호[ ]안에 묶여져 있으므로 사이즈의 가장 앞 숫자는 2가 되는 것입니다.

 

자 그럼 마지막으로 이 규칙을 3차원 텐서에 적용해보겠습니다.

가독성을 위해서 색깔을 넣어보았습니다. 보시면 가장 바깥의 괄호가 요소를 2개를 갖고 있으니 axis 0의 크기는 2가 되겠네요.

그 다음 안쪽 괄호 역시 각각 2개의 요소를 갖고 있으니 axis 1의 크기는 2가 될 것이고, 마지막 axis 2는 딱봐도 3이 되겠네요.

 

따라서 정답은 (2, 2, 3)의 사이즈를 갖습니다.

반응형

+ Recent posts