📚 파이토치란?
파이토치는 파이썬 기반 머신러닝 라이브러리다. 텐서플로우, 케라스보다 확장성이 더 좋아서 최근에는 사용자가 점차 증가하고 있다. 파이토치의 장점은 다음과 같다.
• 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일
'머신러닝, 딥러닝 > 파이토치' 카테고리의 다른 글
[파이토치 스터디] 과적합 방지를 통한 모델 성능 개선 (0) | 2022.02.23 |
---|---|
[파이토치 스터디] 오토인코더 (1) | 2022.02.16 |
[파이토치 스터디] RNN, LSTM (0) | 2022.02.09 |
[파이토치 스터디] AlexNet - CIFAR 10 이미지 분석 (0) | 2022.01.31 |
[파이토치 스터디] 신경망으로 회귀분석 + Cross Validation (0) | 2022.01.29 |
댓글