반응형
강의 목표
- Transfer Learning과 Fine-Tuning의 개념 및 활용법 이해
- 실제 프로젝트를 통해 PyTorch를 활용한 모델 설계, 훈련, 평가 경험
- 프로젝트 발표 및 코드 리뷰를 통한 실전 감각 향상
강의 내용
1. Transfer Learning
- Transfer Learning 개념
- 사전 학습된 모델을 새로운 문제에 적용
- 적은 데이터로도 높은 성능을 얻을 수 있는 방법
- 사전 학습된 모델 사용
- torchvision.models 모듈에서 사전 학습된 모델 로드
- 특정 레이어의 가중치 고정
import torch
import torchvision.models as models
# Pretrained ResNet 모델 로드
resnet = models.resnet18(pretrained=True)
# 마지막 레이어 변경 (예: 10개의 클래스를 가진 새로운 데이터셋에 맞게)
num_features = resnet.fc.in_features
resnet.fc = torch.nn.Linear(num_features, 10)
# 특정 레이어의 가중치 고정
for param in resnet.parameters():
param.requires_grad = False
2. Fine-Tuning
- Fine-Tuning 개념
- 사전 학습된 모델의 일부 또는 전체를 재훈련하여 성능 개선
- Fine-Tuning 방법
- 모든 레이어의 가중치를 학습하도록 설정하거나, 일부 레이어만 학습 가능하도록 설정
# 특정 레이어만 학습 가능하도록 설정
for param in resnet.layer4.parameters():
param.requires_grad = True
# 옵티마이저 설정 시 학습 가능한 파라미터만 전달
optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, resnet.parameters()), lr=0.001)
3. 프로젝트 설명 및 진행
- 프로젝트 개요
- Kaggle 데이터셋을 이용한 실전 프로젝트 수행
- 모델 설계, 훈련, 평가 및 결과 발표
- 데이터셋 선택
- Kaggle 또는 기타 오픈 데이터셋에서 프로젝트 데이터셋 선택
- 예시: CIFAR-10, Dogs vs. Cats, etc.
- 프로젝트 단계
- 데이터 전처리 및 준비
- 모델 설계 및 구현
- 모델 훈련 및 검증
- 성능 평가 및 결과 분석
4. 프로젝트 예시
- 예시 프로젝트: Dogs vs. Cats 이미지 분류
- 데이터셋 로드 및 전처리
- Transfer Learning을 사용한 모델 구현
- 모델 훈련 및 평가
import torch
import torchvision.transforms as transforms
import torchvision.datasets as datasets
import torchvision.models as models
import torch.optim as optim
import torch.nn as nn
from torch.utils.data import DataLoader
# 데이터 전처리 변환
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
# 데이터셋 로드
train_dataset = datasets.ImageFolder(root='data/train', transform=transform)
val_dataset = datasets.ImageFolder(root='data/val', transform=transform)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False)
# Pretrained ResNet 모델 로드 및 수정
model = models.resnet18(pretrained=True)
num_features = model.fc.in_features
model.fc = nn.Linear(num_features, 2)
# 특정 레이어의 가중치 고정
for param in model.parameters():
param.requires_grad = False
for param in model.fc.parameters():
param.requires_grad = True
# 손실 함수와 옵티마이저 설정
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.fc.parameters(), lr=0.001)
# 모델 학습
num_epochs = 5
for epoch in range(num_epochs):
model.train()
running_loss = 0.0
for inputs, labels in train_loader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
running_loss += loss.item()
print(f'Epoch {epoch+1}, Loss: {running_loss/len(train_loader)}')
# 모델 평가
model.eval()
correct = 0
total = 0
with torch.no_grad():
for inputs, labels in val_loader:
outputs = model(inputs)
_, predicted = torch.max(outputs.data, 1)
total += labels.size(0)
correct += (predicted == labels).sum().item()
print(f'Accuracy: {100 * correct / total}%')
5. 프로젝트 수행
- 학생들은 각자 또는 소규모 그룹으로 프로젝트 수행
- 주어진 데이터셋을 사용하여 모델을 설계하고 훈련
- Transfer Learning과 Fine-Tuning을 적용하여 성능 향상 시도
- 모델의 성능을 검증 데이터셋을 통해 평가
6. 프로젝트 발표 및 코드 리뷰
- 프로젝트 발표
- 각 그룹은 프로젝트 결과를 발표
- 모델 설계, 훈련 과정, 성능 평가 결과 등을 공유
- 코드 리뷰
- 각 그룹의 코드를 리뷰하고 피드백 제공
- 개선할 점 및 좋은 점 공유
7. 과제 제출
- 최종 프로젝트 코드 및 보고서 제출
- Jupyter Notebook 파일로 제출
- 제출 기한: 다음 강의 시작 전까지
반응형
'AI Framework > PyTorch' 카테고리의 다른 글
[PyTorch] 10주차: 모델 배포 및 최종 프로젝트 발표 (0) | 2024.05.30 |
---|---|
[PyTorch] 9주차: 모델 최적화 및 고급 주제 (0) | 2024.05.30 |
[PyTorch] 7주차: CNN (Convolutional Neural Network) (0) | 2024.05.30 |
[PyTorch] 6주차: 모델 훈련 및 평가 (0) | 2024.05.30 |
[PyTorch] 5주차: 데이터셋 및 DataLoader (0) | 2024.05.30 |