본문 바로가기
Pytorch

[Pytorch] 튜토리얼(1)

by xangmin 2021. 5. 17.
반응형

1. 딥러닝과 Pytorch 라이브러리 개요

1) 파이토치(Pytorch)란?

 - Pytorch는 GPU 연산을 사용하기 위한 Numpy 대체물

 - 속도와 유연성을 극대화한 딥러닝 연구 플랫폼

 

2) 딥러닝 라이브러리 비교

Tensorflow Pytorch
Google Facebook
Define and Run Define by Run
정적 그래프 동적 그래프
상품에 대한 견고한 파이프라인을 가짐 쉬운 덕분에 많은 연구, 교습 커뮤니티가 존재
넓은 산업적 커뮤니티가 존재 파이토치 연구자들, 졸업자들이 산업쪽으로 많이 넘어옴.

 

3) 하드웨어

GPU를 활용한 파이토치 연습을 위해서는 NVIDIA GTX 1070 이상의 GPU를 추천한다.

Pytorch는 원래 Linux와 macOS를 지원했었고, 2018년부터 Winodws도 지원하게 되었다.

하지만 Apple 노트북은 CUDA를 지원하는 GPU를 탑재하지 않으므로 CPU만 사용가능하다.

 

2. 텐서(Tensor)

a = [[1.0, 2.0], [3.0, 1.0], [2.5, 1.5]]
tensor = torch.tensor(a)
tensor
>>
 
tensor([[1.0000, 2.0000],
        [3.0000, 1.0000],
        [2.5000, 1.5000]])

다음과 같은 2차원 배열을 torch.tensor를 통해 바로 텐서로 변환할 수 있다.

 

Storage

tensor.storage()
>>
 
1.0
2.0
3.0
1.0
2.5
1.5
[torch.FloatStorage of size 6]

 

텐서는 모양이 다양할 수 있지만, 저장공간은 1차원 배열로 storage에 저장된다.

 

Transpose

tensor_t = tensor.t()
tensor_t
>>
 
tensor([[1.0000, 3.0000, 2.5000],
        [2.0000, 1.0000, 1.5000]])

하지만 transpose 후에도 저장된 순서는 같다.

 

Contiguous

원래 텐서와 트랜스포즈된 텐서의 연속성을 비교보자.

tensor.is_contiguous()
>>
True
 
tensor_t.is_contiguous()
>>
False

 

tensor_t = tensor_t.contiguous()
tensor_t.is_contiguous()
>>
True

contiguous 하지 않은 텐서는 다음과 같이 연속하게 만들 수 있다.

 

Numeric type

텐서는 다양한 타입을 가지고 있다.

기본값(default)은 torch.float(=torch.float32)이며, 32bit floating point이다.

 

그 외

torch.double(=torch.float64)

torch.int8

torch.uint8

torch.int(=torch.int32)

torch.long(torch.int64)

 

텐서 저장(Serializing tensors)

pytorch는 tensor 객체를 직렬변환하기 위해 pickle을 이용한다. 다음과 같이 torch 객체를 쉽게 저장할 수 있다. model을 저장하는데 주로 사용되는데 model이 알고보면 거대한 torch 객체 덩어리임을 알 수 있다.

torch.save(tensor, '../data/out/result.t')

 

저장한 모델은 아래와 같이 불러들일 수 있다.

loaded_tensor = torch.load('../data/out/result.t')

하지만 이는 pytorch 라이브러리가 없는 경우 다른 환경에서 열 수 없다.

 

GPU를 사용하는 텐서로 변환

import torch
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

 GPU사용이 가능하다면 "CUDA:0:"가, 그렇지 않다면 "cpu"가 device에 저장된다.

 

데이터 뒤에서 .to()를 이용한다.

 

tensor_gpu = tensor.to(device)

GPU가 사용가능하다면, 이 코드는 같은 숫자 데이터를 갖는 새로운 텐서를 반환하며, 기본 RAM이 아닌 GPU의 RAM안에 저장된다.

 

물론 GPU가 여러대면 cuda:N 을 조정하여 사용할 GPU를 고를 수 있다.

 

다음과 같이 간단하게 실행할 수 있다.

tensor_gpu = tensor.cuda() # default는 0 입니다.
tensor_gpu = tensor.cuda(0)
tensor_cpu = tensor.cpu()

출처 :https://wordbe.tistory.com/entry/Pytorch-1-%ED%8C%8C%EC%9D%B4%ED%86%A0%EC%B9%98%EB%A5%BC-%EC%8D%A8%EC%95%BC%ED%95%98%EB%8A%94-%EC%9D%B4%EC%9C%A0-%ED%85%90%EC%84%9C%EB%9E%80

반응형

'Pytorch' 카테고리의 다른 글

[Pytorch] Custom dataset & dataloader 만들기  (0) 2021.06.21
[Pytorch] Numpy에서 Tensor로  (0) 2021.06.21
[Pytorch] CNN을 이용한 MNIST  (0) 2021.06.07
[Pytorch] DNN을 이용한 MNIST  (0) 2021.06.07
[Pytorch] 튜토리얼(2)  (0) 2021.05.17

댓글