본문 바로가기
Artificial Intelligence/PyTorch

텐서 조작하기

by YUNZEE 2023. 12. 29.
728x90
벡터, 행렬, 텐서 개념 설명

https://wikidocs.net/52460

 

벡터는 1차원으로 구성된 값을 말한다.

행렬은 2차원으로 구성된 값을 말한다.(= 2차원 텐서)

텐서는 3차원 이상으로 구성된 값을 말한다.

 

테이터사이언스 분야 한정으로 3차원 이상의 텐서는 그냥 다차원 행렬 또는 배열로 간주할 수 있습니다. 또한 주로 3차원 이상을 텐서라고 하긴 하지만, 1차원 백터나 2차원인 행렬도 텐서라고 표현하기도 합니다.

PyTorch Tensor Shape Convetion

*2D Tensor(Typical Simple Setting)

|t| = (Batch size, dim) =>  (batch size × dimension)

- 2D 텐서에 대한 예시를 들어보자

훈련 데이터 하나의 크기를 256이라고 가정해 보자. 

훈련 데이터는 [3,1,2,5,4,...] 라고 하자 

이 훈련 데이터는 256개의 숫자로 구성되어 있다. 따라서, 훈련 데이터 하나의 차원(dimension)은 256이다.

 

훈련 데이터의 개수가 3000개라고 가정해보자. 그러면, 전체 훈련 데이터의 크기는 3000 x 256이 된다.

즉, 전체 훈련 데이터는 768,000개의 숫자로 구성되어 있다. 이 데이터는 행렬로도 표현할 수 있

[

[3, 1, 2, 5, ...],

[3, 1, 2, 5, ...],

...,

[3, 1, 2, 5, ...]

]

이 행렬의 행의 개수는 3000개이고, 열의 개수는 256개이다. 따라서, 이 행렬은 2D텐서이다.

 

그리고 컴퓨터 처리는 컴퓨터 훈련 테이터를 하나씩 처리하는 것보다 보통 덩어리로 처리한다. 이 덩어리를 배치라고 한다. 예를 들어, 훈련 데이터에서 64개씩 꺼내서 처리한다고 가정할 때, 이때 배치 크기는 64이다.

그러면, 컴퓨터가 한 번에 처리하는 2D텐서의 크기는 (batch size x dim) = 64 x 256이다.

즉, 컴퓨터가 한 번에 처리하는 2D텐서는 16,384개의 숫자로 구성되어 있다.

*3D Tensor(Typical Computer Vision) - 비전 분야에서의 3차원 텐서

|t| = (batch size, width, height)

일반적으로 자연어 처리보다 비전 분야(이미지, 영상 처리)를 하시게 된다면 좀 더 복잡한 텐서를 다루게 됩니다. 이미지라는 것은 가로, 세로라는 것이 존재한다. 그리고 여러 장의 이미지, 그러니까 batch size로 구성하게 되면 아래와 같이 3차원의 텐서가 된다.

* 3D Tensor(Typical Natural Language Processing) - NLP 분야에서의 3차원 텐서

|t| = (batch size, length, dim)

자연어 처리는 보통 (batch size, 문장 길이, 단어 벡터의 차원)이라는 3차원 텐서를 사용한다.

 NLP 분야에서의 3차원 텐서 예제

1. 아래와 같이 4개의 문장으로 구성된 전체 훈련 데이터가 있다.

[[나는 사과를 좋아해], [나는 바나나를 좋아해], [나는 사과를 싫어해], [나는 바나나를 싫어해]]

 

2. 컴퓨터의 입력으로 사용하기 위해 문장을 단어별로 나눠준다.

[['나는', '사과를', '좋아해'], ['나는', '바나나를', '좋아해'], ['나는', '사과를', '싫어'], ['나는', '바나나를', '싫어해']]

 

3. 이제 훈련 데이터의 크기는 4x3의 크기를 가지는 2D텐서이다. 컴퓨터는 숫자를 더 잘 처리할 수 있기 때문에 이제 각 단어를 벡터로 만들어 준다. 3차원 벡터로 만들어 준다.(의미가 부여되지 않은 상태에서의 소수는 랜덤으로 대입한 것 하지만, 단어 벡터는 훈련 데이터를 통해 학습)

'나는' = [0.1, 0.2, 0.9]
'사과를' = [0.3, 0.5, 0.1]
'바나나를' = [0.3, 0.5, 0.2]
'좋아해' = [0.7, 0.6, 0.5]
'싫어해' = [0.5, 0.6, 0.7]

위의 기준으로 재구성하면

[[[0.1, 0.2, 0.9], [0.3, 0.5, 0.1], [0.7, 0.6, 0.5]], #나는 사과를 좋아해
 [[0.1, 0.2, 0.9], [0.3, 0.5, 0.2], [0.7, 0.6, 0.5]], #나는 바나나를 좋아해
 [[0.1, 0.2, 0.9], [0.3, 0.5, 0.1], [0.5, 0.6, 0.7]], #나는 사과를 싫어해
 [[0.1, 0.2, 0.9], [0.3, 0.5, 0.2], [0.5, 0.6, 0.7]]] #나는 바나나를 싫어해

이제 훈련 테이터는 4x3x3의 크기를 가지는 3D텐서이다. 이제 batch size를 2로 해보겠습니다.

첫번째 배치 #1
[[[0.1, 0.2, 0.9], [0.3, 0.5, 0.1], [0.7, 0.6, 0.5]],
 [[0.1, 0.2, 0.9], [0.3, 0.5, 0.2], [0.7, 0.6, 0.5]]]

두번째 배치 #2
[[[0.1, 0.2, 0.9], [0.3, 0.5, 0.1], [0.5, 0.6, 0.7]],
 [[0.1, 0.2, 0.9], [0.3, 0.5, 0.2], [0.5, 0.6, 0.7]]]

컴퓨터는 배치 단위로 가져가서 연산을 수행한다. 그리고 현재 각 배치의 텐서의 크기는 (2 x 2 x 3)이다.

728x90

'Artificial Intelligence > PyTorch' 카테고리의 다른 글

텐서 조작하기(3)  (4) 2024.01.10
텐서 조작하기(2)  (10) 2024.01.03
데이터의 분리  (4) 2023.12.26
파이썬, 아나콘다, jupyter notebook 설치방법  (4) 2023.12.23