Azure Zest

[ Pytorch로 시작하는 딥러닝 ] 2_1. 데이터 구조 본문

Deep Learning

[ Pytorch로 시작하는 딥러닝 ] 2_1. 데이터 구조

LABONG_R 2020. 8. 6. 01:19
본문은 책 ‘pytorch로 시작하는 딥러닝’을 보면서 공부하고 정리한 글입니다.

 

1. 스칼라(0차원 텐서)

- 1개 요소를 갖는 텐서
- pytorch에서는 FloatTensor 또는 LongTensor 타입을 사용해 표현함.

2. 벡터(1차원 텐서)

- 요소의 배열 : 스칼라의 확장

3. 행렬(2차원 텐서)

- 구조화된 데이터는 주로 테이블이나 행렬의 형태
- torch 모듈은 numpy 배열을 torch의 Tensor로 변환하는 from_numpy() 함수를 제공

4. 텐서(3차원)

- 여러 행렬을 결합한 형태
- 주로 이미지 같은 데이터를 표현할 때 사용
- 이미지의 크기가 250,250,3 이라면 높이, 폭, 채널을 나타냄

따라서 데이터의 구조는 어릴때, 점, 선, 면에 대해 배웠던 것처럼 같은 방식으로 생각하면 된다. 그림으로 살펴본다면 다음과 같이 나타낼 수 있다.


특히, 영상처리를 주로 하고자 한다면 텐서의 형태에 익숙해져야 한다. 기본적으로 컬러 이미지에서는 RGB 채널이 존재하기 때문에 앞서 말했던 것처럼 높이, 폭, 채널로 이루어져 있고, 이는 텐서 형태로 나타내야하기 때문이다. 또한, 의료 영상은 흑백이기 때문에 RGB 채널이 존재하지는 않지만 보통 3D 영상이기 때문에 마찬가지로 텐서로 다룰 것이다.

5. 4차원 텐서

딥러닝을 돌릴 때 보통, 속도를 보다 높이기 위해 여러장의 이미지를 한꺼번에 처리한다. (하드웨어의 발달로 감당할 수 있지만, 너무 메모리를 많이 차지하는 경우, 특히 3D volume image를 처리하는 경우에는 배치를 하면 메모리 에러가 발생할 수 있다.) 배치란 여러장의 이미지를 동시에 병렬적으로 처리할 때의, 그 이미지 묶음을 의미한다. 이렇게 이미지 배치를 이용할 경우, 텐서를 확장시켜 4차원으로 사용한다. 일반적으로 사용하는 배치의 크기는 16,32,64이며 영상처리를 할 때 보통 [배치, 높이, 폭, 채널]의 순서로 4차원 텐서를 이룬다.

6. 5차원 텐서

영상처리의 경우가 4차원이었다면, 이를 시간축으로 확장시킨다면 어떻게 될까? 바로 동영상 데이터가 5차원 텐서을 주로 사용한다. 따라서 [배치, 프레임, 높이, 폭, 채널]과 같은 순으로 5차원 텐서를 사용할 수 있다.

pytorch에서는 덧셈, 뺄셈 등의 여러가지 연산을 이용하여 텐서들의 연산을 할 수 있다. 이 때 중요한 점은 gpu를 사용하는 것이다. cpu보다 gpu에서 훨신 연산 속도 등이 빠르기 때문에 연산이 cpu에서 작동하는지 gpu에서 작동하는 지를 잘 살펴 보아야 한다. pytorch는 cuda()함수를 이용하여 cpu에서 동작하는 tensor를 복사하여 gpu에서 동작할 수 있도록 한다. 후에 네트워크를 훈련시킬 때에도 cuda()함수를 잘 사용할 수 있도록 유의해야 한다.

 

Reference

Pytorch로 시작하는 딥러닝