본문 바로가기
딥러닝\머신러닝

[pytorch] tensor를 이해해보자!

by 인포메틱스 2021. 8. 5.
반응형

tensor라 함은 3차원 이상의 데이터를 이야기합니다.

 

0차원은 scaler, 1차원은 vector, 2차원은 matrix (행렬) 이라고 하죠.

 

우리가 딥러닝을 배우면서 많이 다루게될 데이터는 2차원 이상의 데이터입니다. 

 

그렇다면 2차원 이상의 데이터를 어떻게 생각해야할까요?!

 

아래 그림을 보면서 설명하도록 하겠습니다.

출처:Pixabay로부터 입수된 PublicDomainPictures님의 이미지 입니다.

위 사람사진에 대해서  얻을수 있는 데이터를 상상해 봅시다.

 

유전자에 대해서 알수가 있을 것 같고, 뼈사진을 통해 건강한 뼈를 가진 사람인지도 알 수가 있을것같구요. 그리고 키도 알 수가 있겠죠. (정확한 수치는 사진에 나오지 않았지만 알수있다고 가정해봅시다.)

 

한 사람에서 나오는 데이터의 양을 유전자, 뼈상태, 키 이렇게 대략 알 수가 있을 것입니다. 

 

여기서 유전자, 뼈상태, 키 각각을 scalar라고 부를수 있을 것 같습니다.

 

그리고 한 사람에 대한 정보를 하나의 데이터로 모아둔다면 하나의 vector로 생각할 수가 있습니다.

name 유전자상태 (점수) 뼈상태 (점수)
A 90 95 132

 

 그리고 이 vector들을 시간마다 재측정을 하게되면 vector가 여럿생기게 되고, 이를 matrix라고 부릅니다.

 

name 유전자상태 (점수) 뼈상태 (점수) 시간 (연령)
A 90 95 132 10
A 89 92 170 15
A 88 90 176 16
A 85 85 180 17
A 80 80 190 18

(참고자료는 임의로 제작되었습니다. 그냥 A라는 사람이 10살부터 방사능 노출 음식을 섭취했다고 생각해보죠)

 

다음으로는 한 사람이 아닌 여러사람들에 대해서 데이터를 모으게 되면 드디어 Tensor가 되게 됩니다.

 

여기 이후부터는 또 어떠한 변수를 추가함으로서 Tensor를 늘릴수가 있겠죠. (다음세대의 데이터라던지..)

 

pytorch에서는 scalar는 그냥 숫자로 표시( ex 1,2,3 )할 수가 있고,

 

vector는 list로 표시 ( ex [1,2,3] ) matrix는 list를 두번 넣습니다. ( ex [ [1,2,3] , [4,5,6] ] )

 

tensor는 list에 matrix를 표현하는 list를 넣으면 되겠죠?

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

 

그리고 차원을 나타낼 때, 차원이 추가 될때마다 앞에서 숫자가 올라갑니다. 예를 들어 scalar의 경우

 

 

size가 1로 나타내고, vector또한 마찬가지로 개수로 나타냅니다. 그리고 matrix에서는 다음과 같습니다.

 

차원이 추가됨과 동시에 앞에 숫자가 붙습니다.. (matrix로 차원이 올라가면서 3이 생겼죠?) 그렇다면 3차원의 경우에는?! 마찬가지로 앞쪽에 숫자가 붙습니다..

3,2인 matrix가 2개가 있다는 것을 첫번째 줄에서 확인이 가능합니다.

 

python에서는 이렇게 차원이 올라가면 올라갈수록 앞쪽에 표시를 합니다. 이것이 왜 중요하냐!

 

우리는 적어도 3차원 (Tensor)를 다루기 때문에 3차원 데이터가 어떻게 쌓이고 표현되는지 대략적으로 알아야 합니다.

 

예를 들어 argmax라던가, topk와 같은 기능을 진행할 때 어떤식으로 결과값이 나왔는지에 대해서 인식을 해야 사용 및 응용도 가능하겠죠?

 

한번 봅시다. topk나 argmax의 경우 원하는 차원(dimension)기준으로 최댓값을 갖는 위치나 값을 줍니다.

 

위와 같은 Tensor에 argmax를 사용하게 되면 아래와 같이 결과가 나옵니다. 결과를 봤을 때 어떤 값이 나왔는지 헷갈리기 시작합니다. 

 

 

 그렇기 때문에 자료가 어떻게 쌓이는지 확인해볼 필요가 있다는 거죠... 위의 argmax에 대한 결과를 설명하면 다음과 같습니다.

 

출처 : 내가 힘들게함

 

그래서 결과값은 아래와 같이 데이터가 쌓이게 되고 결과가 나오게 됩니다.

 

출처 : 내가 힘들게함

 

 

마찬가지로 topk 또한 같은 방법을 통해서 결과가 나오게 됩니다.

 

topk의 경우 상위의 위치 + 값도 얻을수있습니다. 혹은 상위 n개의 데이터도 얻을수 있구요.

 

 


이렇게 쓰고 전체를 보니 뭔가 읽기 조금 어려울 것 같다는.. 추후에 좀 더 내용보완도 진행하겠습니다.

728x90
반응형

댓글