파이토치 사용법 요약
파이토치(PyTorch)는 Python 기반의 딥러닝 프레임워크로, 빠르고 유연한 모델 구축을 지원하는 대표적인 딥러닝 라이브러리입니다. PyTorch 사용법을 크게 다섯 단계로 요약할 수 있습니다.
### 1. **PyTorch 설치**
**설치 방법**:
pip install torch torchvision torchaudio
또는 GPU를 사용하는 경우 CUDA 지원 버전을 설치합니다.
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
### 2. **텐서(Tensor) 다루기**
- **텐서 정의**: PyTorch에서 데이터는 텐서(tensor)로 처리되며, 이는 NumPy의 배열과 유사하지만 GPU를 지원하여 고속 연산이 가능합니다.
- **텐서 생성**:
import torch
# 1D 텐서 생성
x = torch.tensor([1.0, 2.0, 3.0])
# 2D 텐서 생성
y = torch.rand(2, 3) # 랜덤값으로 2x3 텐서 생성
- **텐서 연산**: 텐서 간의 덧셈, 곱셈, 행렬 연산 등을 GPU를 사용하여 처리할 수 있습니다.
# 텐서 덧셈
z = x + y
# GPU로 텐서 이동
x_gpu = x.to('cuda')
### 3. **신경망 모델 만들기**
- **`torch.nn.Module`**: PyTorch에서 신경망 모델을 만들 때는 `torch.nn.Module`을 상속받아 클래스 형태로 구현합니다.
- **모델 정의**:
import torch.nn as nn
class SimpleModel(nn.Module):
def __init__(self):
super(SimpleModel, self).__init__()
self.fc1 = nn.Linear(10, 50) # 입력 10, 출력 50
self.fc2 = nn.Linear(50, 1) # 입력 50, 출력 1
def forward(self, x):
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
model = SimpleModel()
### 4. **데이터셋 및 데이터 로더(DataLoader)**
- **데이터셋 준비**: PyTorch는 `torchvision` 등의 라이브러리를 통해 이미지 데이터셋 등을 쉽게 다룰 수 있습니다.
- **DataLoader 사용**: `DataLoader`는 데이터를 배치(batch) 단위로 묶어 모델에 전달합니다.
from torch.utils.data import DataLoader, Dataset
# 커스텀 데이터셋 정의
class MyDataset(Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
return self.data[idx], self.labels[idx]
# 데이터셋과 데이터로더
dataset = MyDataset(torch.randn(100, 10), torch.randint(0, 2, (100,)))
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
### 5. **모델 학습**
- **손실 함수 및 옵티마이저 설정**: PyTorch는 다양한 손실 함수와 최적화 알고리즘을 제공합니다.
loss_fn = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
- **학습 루프**: PyTorch에서 모델을 학습하는 기본 루프 구조는 다음과 같습니다.
for epoch in range(100): # 에포크 반복
for inputs, targets in dataloader:
# 순전파
outputs = model(inputs)
loss = loss_fn(outputs, targets)
# 역전파 및 최적화
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f'Epoch {epoch}, Loss: {loss.item()}')
### 6. **모델 평가**
- 학습된 모델은 학습 데이터 외의 검증 데이터로 평가합니다. 평가 시에는 역전파(gradient)를 계산하지 않으므로 `torch.no_grad()`로 감싸서 성능을 평가합니다.
with torch.no_grad():
for inputs, targets in dataloader:
outputs = model(inputs)
# 성능 평가 코드 추가
### 7. **GPU 사용**
- PyTorch는 간단한 명령어로 CPU에서 GPU로 연산을 전환할 수 있습니다.
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)
### 8. **모델 저장 및 로드**
- 모델 학습이 끝난 후 학습된 가중치를 저장할 수 있습니다.
torch.save(model.state_dict(), 'model.pth')
- 저장한 모델을 다시 불러오는 방법은 다음과 같습니다.
model.load_state_dict(torch.load('model.pth'))
model.eval() # 평가 모드로 전환
### 9. **Transfer Learning (전이 학습)**
- 기존에 학습된 모델의 가중치를 활용하여 새로운 작업을 빠르게 학습시키는 방법입니다. `torchvision.models`에서 미리 학습된 모델을 로드하여 새로운 작업에 맞게 미세 조정합니다.
from torchvision import models
model = models.resnet18(pretrained=True)
'IT.DT > SKN 회고록' 카테고리의 다른 글
SKN AI bootcamp 5기 9주차 (0) | 2024.10.06 |
---|---|
SKN AI bootcamp 5기 7주차 (1) | 2024.10.06 |
SKN AI bootcamp 5기 6주차 (2) | 2024.10.04 |
SKN AI bootcamp 5기 4주차 (0) | 2024.09.19 |
SKN AI bootcamp 5기 3주차 (0) | 2024.09.19 |