본문 바로가기

IT.DT/SKN 회고록

SKN AI bootcamp 5기 8주차

파이토치 사용법 요약

 

파이토치(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