2023. 12. 1. 08:50ㆍ머신러닝, 딥러닝/파이토치
📚 파이토치란?
파이토치는 파이썬 기반 머신러닝 라이브러리다. 텐서플로우, 케라스보다 확장성이 더 좋아서 최근에는 사용자가 점차 증가하고 있다. 파이토치의 장점은 다음과 같다.
• GPU 연산을 통해서 멀티 태스킹이나 고차원 문제를 빠르게 해결할 수 있다.
• 다양한 모델과 데이터셋을 제공해서 유연한 모델 구축이 가능하다. 즉, 텐서플로우나 케라스보다 확장성과 유연성이 높아서 최근에 많이 사용되고 있다.
• numpy와 사용법과 구조가 유사하기 때문에 사용하기가 쉽다.
• 최근에는 사용자가 증가하면서 정보 공유도 쉬워지고 있다.
📚 기본 문법
|
import torch |
|
import torchvision |
|
import torchvision.transforms as tr |
|
from torch.utils.data import DataLoader, Dataset |
|
import numpy as np |
|
import matplotlib as plt |
필요한 라이브러리를 불러온다. torchvision은 이미지와 관련된 라이브러리이고, torchvision.transforms는 이미지 전처리 관련 기능을 제공한다.
|
#16x16 형태로 변경 후 텐서 타입으로 변경 |
|
transf = tr.Compose([tr.Resize(16), tr.ToTensor()]) |
|
|
|
#데이터를 불러오면서 transf를 이용해서 전처리까지 수행 |
|
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transf) |
|
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transf) |
|
|
|
#채널수x너비x높이 |
|
print(trainset[0][0].size()) |
라인2에서 데이터 전처리 방법을 정한다. 여기서는 16x16사이즈로 변경하고 텐서 유형으로 전환한다.
그리고 데이터를 불러오면서 설정한 전처리를 함께 수행한다.
파이토치는 개별 이미지 파일에 대해서 "채널수 x 너비 x 높이" 형태로 표시가 되니까 참고.
|
trainloader = DataLoader(trainset, batch_size=50, shuffle=True) |
|
testloader = DataLoader(testset, batch_size=50, shuffle=False) |
DataLoader를 통해서 데이터를 미니배치 형태로 만든다. 여기서는 전체 데이터가 5만개이고 배치 사이즈가 50이기 때문에, 배치의 수는 1000개가 된다. shuffle은 무작위로 섞는다는 뜻.
|
images, labels = iter(trainloader).next() |
|
print(images.size()) |
배치를 확인해보면 "배치크기 x 채널수 x 너비 x 높이" 가 올바르게 표시되는 것을 확인할 수 있다.
|
#개별 이미지 확인 |
|
oneshot = images[1].permute(1,2,0).numpy() |
|
plt.figure(figsize=(2,2)) |
|
plt.imshow(oneshot) |
|
plt.show() |
 
개별 이미지를 확인할 때에는 permute를 사용해서 너비x높이x채널수 형태로 변경해야 한다.
📚 view() 함수
파이토치 모델에 변수를 입력할 때, 형태를 변경하기 위해서 자주 사용된다.
view를 사용하면 텐서의 형태를 변경할 수 있다. 단, 위의 경우에 4x4 형태로 변경은 문제 없지만, 3x5 로 변경하는 등 원소의 수가 맞지 않은 경우에는 에러가 발생한다.
📌 -1이 하는 역할
view(행, 열) 에서, 행을 특정 숫자로 입력하고 열을 -1로 입력하면 행의 값에 따라서 자동으로 열의 크기가 지정된다. 반대의 경우도 마찬가지.
📚 Dataloader
데이터로더의 크기 확인
|
dataset = torchvision.datasets.CIFAR10(root = './data', train=True, download=True, transform = transform) #dataset = 5만개 |
|
trainset, valset = torch.utils.data.random_split(dataset, [30000,20000]) |
|
|
|
trainloader = torch.utils.data.DataLoader(trainset, batch_size=32, shuffle=True) |
|
valloader = torch.utils.data.DataLoader(valset, batch_size=32, shuffle=False) |
|
|
|
print(len(trainloader.dataset)) |
📚 Reference
딥러닝을 위한 파이토치 입문, 딥러닝호형 저, 영진닷컴, 2022년 01월 20일
'머신러닝, 딥러닝 > 파이토치' 카테고리의 다른 글
[PyTorch] RNN, LSTM (0) | 2023.12.01 |
---|---|
[PyTorch] AlexNet (0) | 2023.12.01 |
[PyTorch]신경망으로 회귀분석 / Cross Validation (0) | 2023.12.01 |