Image processing/Deep-learning

[Pytorch] 차원에 따른 Tensor

유니디니 2019. 3. 24. 14:56
728x90
반응형

참고 자료

[1] Pytorch로 시작하는 딥러닝, 비슈누 수브라마니안 지음, 김태완 옮김

Pytorch는 데이터를 추상화 하는 Tensor와 Variable 을 제공. Tensor는 파이썬의 numpy 배열과 유사한 클래스를 의미하며, GPU 에서 향상된 성능을 제공하기 때문에 딥 러닝(Deep learning)에서는 Tensor의 형태로 데이터를 변환하여 사용한다.

Tensor의 유형 및 연산

1. 스칼라(Scalar) : 0차원 Tensor로, 단순하게 하나의 값만 존재한다. 

2. 벡터(Vector) : 1차원 Tensor로, 1차원 배열을 의미한다.

3. 행렬(Matrix) : 2차원 Tensor로, 행렬의 의미한다.

4. 3차원 Tensor : 이미지와 같은 여러 형렬을 결합한 데이터를 의미한다. 이미지의 모양(shape)이 (200x200x3) 이면 이미지의 높이(Height), 폭(Width), 채널(Channel) 말하며, 채널은 RGB를 의미한다.

5. Tensor 슬라이싱(Slicing) : Tensor의 객체를 자르는 방법으로, 객체를 줄이거나 필요한 정보만 사용할때 이용된다.

ex) x = torch.FloatTensor([222.4, 1.22, 100.0, 3.555, 88.9, 255.21, 2.156])

print(x[:2]) "tensor([222.4000, 1.2200])"

print(x[:-2]) "tensor([222.4000, 1.2200, 100.0000, 3.5550, 88.9000])"

6. 4차원 Tensor : 대표적으로 이미지 배치(batch)의 크기를 나타낸다. 여러 이미지를 한번에 사용한다라는 의미로, 최신 GPU는 여러 데이터에 대해 같은 작업을 수행할때 더 빨리 처리하도록 최적화 되어있다. 예를 들면 Tensor의 크기가 (64x200x200x3)이라고 한다면, 200x200크기의 3채널 데이터를 64개의 배치 크기로 한번에 로딩하여 처리하겠다는 뜻이다. 

7. 5차원 Tensor : 보통 동영상 데이터 처리시 사용된다. 동영상 데이터는 프레임으로 분할 되는데,  60초 짜리 영상은 60개의 프레임을 갖는다면, 데이터의 모양은 (1x60x200x200x3)이 된다. 이러한 영상데이터를 30개 배치의 크기로 올린다면, (30x60x200x200x3)이 되는 것이다.

Variable 

Variable은 데이터(data),기울기(grad), 생성기(creator)로 이루어진 하나의 래퍼클래스이다. 위의 Tensor를 Variable 객체로 나타내게 되면, 다음과 같은 함수를 사용할수 있게 된다. Variable객체를 생성시 requires_grad의 boolean 값을 줌으로써, 역전파(backpropagation)시 기울기를 계산에 대한 조정이 가능하다. (기울기 초기 기본값은 None)

ex) Variable 사용 예제

x = Variable(torch.ones(4,4), requires_grad = True) # 기울기 계산 필요

x = Variable(torch.ones(4,4), requires_grad = False) # 기울기 계산 불필요

데이터(data) :  그 값을 가지는 Tensor를 출력 

기울기(grad) : 어떤 스칼라 값에 대한 변화도

반응형