우리가 PyTorch를 사용하는 이유
- Define by Run 의 장점
즉시 확인 가능→pythonic code- GPU support, Good API and community
- 사용하기 편한 장점이 가장 큼
- TF는 production 과 scalability의 장점
numpy - ndarray
import numpy as np n_array = np.arange(10).reshape(2,5) print(n_array) print("ndim :", n_array.ndim, "shape :", n_array.shape)
torch - tensor
import torch t_array = torch.FloatTensor(n_array) print(t_array) print("ndim :", t_array.ndim, "shape :", t_array.shape)
- tensor가 가질 수 있는 data 타입은 numpy와 동일하고, 사용법도 그대로 적용된다.
- pytorch의 tensor는 GPU에 올려서 사용 가능
view, squeeze, unsqueeze 등으로 tensor 조정가능
PyTorch의 핵심, 자동 미분의 지원
requires_grad=True
loss.backword()
초기 단계에서는 대화식 개발(Jupyter Notebook)이 유리하다. 학습과정과 디버깅 등을 지속적으로 확인할 수 있기 때문. 그러나 배포 및 공유 단계에서는 Notebook공유에는 어려움이 있다. 또한 개발 용이성과 유지보수 능력 향상을 위해서도 OOP/모듈 형태의 프로젝트를 개발하는 것이 필요하다.
Layer 또는 Block의 반복으로 구성되는 최신 딥러닝 모델을 효율적으로 관리하기 위해 필요한 base class
모델에 데이터를 학습시키기 위해 필요한 클래스
dataset 클래스 생성시 유의점
import torch
from torch.utils.data import Dataset
class CustomDataset(Dataset):
def __init__(self, text, labels):
self.labels = labels
self.data = text
def __len__(self):
return len(self.labels)
def __getitem__(self, idx): label = self.labels[idx]
Datasets & Dataloaders
text = self.data[idx]
sample = {"Text": text, "Class": label}
return sample
DataLoader(dataset, batch_size=1, shuffle=False, sampler=None, batch_sampler=None, num_workers=0, collate_fn=None, pin_memory=False, drop_last=False, timeout=0, worker_init_fn=None, *, prefetch_factor=2, persistent_workers=False)