questionet
넘파이, 텐서플로에서 '차원', '축' 의 개념 본문
이미지 출처 jalammar.github.io/visual-numpy/
numpy에서
dim, axis, rank, shape, size 의 의미
1. size 는 총 element의 개수를 뜻한다.
2. dim 은 텐서가 존재하는 축의 개수를 뜻한다.
여기서 축이란,
1차원 벡터, 2차원 행렬, 3차원,...,n차원 텐서에서의
각 1, 2, n을 말한다.
위의 넘파이 배열 b와 그것을 시각화한 그림을 보면
1차원 벡터가 총 8개 있고 [1,2] [3,4] [5,6] [7,8] >>> dim1
[1,2] [3,4] 와 [5,6] [7,8] 을 묶어 2차원 행렬 2개를 만든 후 [[1,2] , [3,4]] [[5,6] , [7,8]] >>> dim2
각 행렬이 3차원 상에 배열된다. [ [[1,2] , [3,4]] , [[5,6] , [7,8]] ] >>> dim3
※ dim을 '축'이 아니라 '차원'이라는 단어로 쓰기도 한다.
이때 벡터나 행렬의 '차원' 과 헷갈리면 안 된다.
벡터, 행렬이 2차원이라고 할 때 차원은 열의 개수를 의미한다
3. shape 는 각 축(차원)에 존재하는 원소의 수를 뜻한다.
[[[1,2] , [3,4]] , [[5,6] , [7,8]]] 여기서 가장 안쪽에 있는 1차원 벡터 안에는 원소가 2개씩 있다 : [1,2] [3,4] [5,6] [7,8]
그 다음 2차원 행렬 안에는 1차원 벡터들이 2개씩 있다 : [[1,2] , [3,4]] [[5,6] , [7,8]]
마지막 3차원에는 2차원 행렬이 2개 있다 : [[[1,2] , [3,4]] , [[5,6] , [7,8]]]
4. rank는 텐서가 몇 차원인지를 나타낸다.
scalar는 rank 가 0인 텐서다. shape는 [ ] 이렇게 표시한다.
[1,2,3] 같은 벡터는 rank가 1인 텐서다. (shape 는 [3] 이 된다.)
[[1,2,3] , [4,5,6]] 과 같은 행렬은 rank가 2인 텐서다. (shape는 [2,3] 이 된다.)
[[[1,2,3]],[[7,8,9]]] 과 같은 3차원 배열은 rank가 3인 텐서다. (shape는 [2,1,3] 이 된다.)
5. axis는 축을 의미하는 데,
axis = 0 은 행렬에서 행을 가리키는 축이고
axis = 1 은 행렬에서 열을 가로키는 축이다.
넘파이나 텐서플로로 배열을 만들 때
왼쪽 그림처럼
4 x 3 행렬을 2개 만든다고 해보자.
NLP task에 쓰이는 데이터 입력값으로
이 배열을 해석해보면
문장의 개수가 총 8개이고
각 문장의 단어는 3개씩인 말뭉치의 각 단어를
실수로 인코딩한 뒤
배치처리를 하기 위해
배치사이즈를 2로 둔
데이터셋으로 간주해 볼 수 있다.
단어 임베딩을 거친 후라면 각 단어를 3차원으로 임베딩한 총 8개의 단어 임베딩 배열을
2개의 미니배치로 나눈 것으로 볼 수도 있다.
그런데 shape을 잘 보면 (배치사이즈 x 행렬의 행의 개수 x 열의 개수) 로 배열이 생성되는 것을 볼 수 있다.
(행렬의 행의 개수 x 열의 개수 x 배치사이즈)로 하지 않은 이유가 뭘까?
차원이 늘어나면
오른쪽 그림과 같이
생각하면 되니 훨씬 간단할 것 같은데 말이다.
그런데 오른쪽 그림 같은 형태로
넘파이 배열을 선언하려면
np.random.random((3,2,4,3))
이라고 써야 한다.
jalammar.github.io/visual-numpy/여기에서는 그 이유를 아래와 같이 설명하고 있다.
NumPy’s order for printing n-dimensional arrays is that
the last axis is looped over the fastest, while the first is the slowest.
'Learning questions > 기초 개념' 카테고리의 다른 글
파이썬, 넘파이, 퍼셉트론 (0) | 2021.10.15 |
---|---|
Mathmatical Notation (0) | 2021.04.16 |
Linear classifier (0) | 2021.01.17 |
validation set (dev set)이 필요한 이유 (0) | 2021.01.04 |
Lec02 요약 (0) | 2021.01.04 |