| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 생성형 인공지능
- 기초
- LangGraph
- 머신러닝
- dementional reduction
- RDBMS
- 랭그래프
- 데이터엔지니어
- 캐글
- 데이터 시각화
- RNN
- 정보처리기사
- 딥러닝
- UMAP
- CNN
- 힙정렬
- Python
- 트랜스포머
- python 기초
- python기초
- SQL
- 알고리즘
- 객체지향
- TTS
- CLIP
- Transformer
- 소프트웨어 개발
- ASR
- 에이전트
- 자연어처리
Archives
- Today
- Total
수달이네 기술 블로그
12. Ailen vs Predator 데이터셋(전이학습으로 해결하기) 본문
영화 Ailen과 Predator 캐릭터를 분류 이미지 데이터셋이다.
이걸 CNN 변형 중 Alexnet을 이용해 만들어 볼 것이다.
이번에 Alexnet구현이 아닌, 전이학습을 배우는데에 초점을 둔다.
import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
from torchvision import datasets, models, transforms
from torch.utils.data import DataLoader
- 기초적으로 사용한 모듈들
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(device)
- device세팅
transforms
data_transforms = {
'train': transforms.Compose([
transforms.Resize((224, 224)),
transforms.RandomAffine(0, shear=10, scale=(0.8, 1.2)),
transforms.RandomHorizontalFlip(),
transforms.ToTensor()
]),
'validation': transforms.Compose([
transforms.Resize((224,224)),
transforms.ToTensor()
])
}
train 데이터셋(증강필요)
- 224x224로 크기설정(데이터셋의 크기가 중구난방이므로)
- RandomAffine: 각도변환 0, 찌그러트림 10, 크기 0.8~1.2배 변환
- RandomHorizontalFlip(): 랜덤으로 수평 뒤집기
- ToTensor: 텐서로 변환 + 정규화
validation 데이터셋
- 224x224로 크기설정
- 텐서로 변환 + 정규화
def target_transforms(target):
return torch.FloatTensor([target])
target값을 FloatTensor로 변환시켜 대괄호로 감싸주는 함수
- 이걸 하는 이유는 추후 데이터셋과 데이터 로더를 만든 후, 데이터셋에 인덱싱을 하게 될 때 나오는 결과를 이미지, 라벨을 동시에 출력해주기 위해.
DataLoader
image_datasets = {
'train' : datasets.ImageFolder('./dataset/AilanPredator/data/train', data_transforms['train'], target_transform=target_transforms),
'validation': datasets.ImageFolder('./dataset/AilanPredator/data/validation', data_transforms['validation'], target_transform = target_transforms)
}
- 이미지를 불러온다. transform 적용(데이터)
- target transform을 적용하여 원래는 레이블이 0,1등 정수형으로 매겨지지만 그 정수형이 실수형으로 변환되어 적용된다.
- ImageFolder는 이미지를 불러와서 이미지 폴더 순으로 레이블값을 매겨주기도 한다.
dataloaders = {
'train': DataLoader(
image_datasets['train'],
batch_size = 32,
shuffle = True
),
'validation': DataLoader(
image_datasets['validation'],
batch_size = 32,
shuffle = False
)
}
image_datasets를 불러와 한번에 32개씩 불러오며, 섞어준다.
validation은 섞을 필요 없음.
len(image_datasets['train']),len(image_datasets['validation'])
# 694,200
- 결과 데이터 개수 확인
이미지 출력
imgs, labels = next(iter(dataloaders['train']))
fig, axes = plt.subplots(4,8, figsize = (16,8))
for ax, img, label in zip(axes.flatten(), imgs, labels):
ax.imshow(img.permute(1,2,0))
ax.set_title(label.item())
ax.axis('off')
데이터로더를 통해 이미지와 라벨을 불러온 후 matplotlib상에 출력해준다.
- 원래는 채널, width, height 순이었는데, matplotlib은 width, height, 채널 순으로 들어와야 하므로 변환해주었다.

- 이것에서 보면 ailen은 0.0으로 predator는 1.0으로 표현된 것을 알 수 있다.
더보기
다음 내용에서 전이학습으로 모델을 학습하는 과정을 배울 것이다.
'AI공부 > 딥러닝' 카테고리의 다른 글
| 13. Ailen vs Predator 데이터셋 2(전이학습 적용) (0) | 2026.02.13 |
|---|---|
| 11. 손글씨 도형 CNN모델 구현 (0) | 2026.02.08 |
| 10. CNN 구현 (0) | 2026.02.06 |
| 9. CNN(Convolutional Neural Network) (0) | 2026.02.05 |
| 8. Multi-class weather dataset(날씨 이미지 데이터셋)2 + 모델 학습 (0) | 2026.02.04 |