train 50,000을 8:2로 나눔: train 40,000 / val 10,000 (시드 42). test는 로더만 만들고 평가하지 않음
레이블·클래스 분포
10개 클래스 (airplane, automobile, bird, cat, deer, dog, frog, horse, ship, truck) 각 5,000장 (CIFAR-10 원본)
전처리
Resize(224) → RandomCrop(224, padding=4) → RandomHorizontalFlip(0.5) → ToTensor → Normalize(mean=(0.4914, 0.4822, 0.4465), std=(0.2470, 0.2435, 0.2616)). 평균·표준편차는 train 5만 장을 쌓아 직접 계산. test에도 같은 증강을 적용
train/val 분할 random_split(..., generator=torch.Generator().manual_seed(42)). 학습 시드 없음
결과학습 곡선 (TensorBoard) val 10,000장 기준, 노트북 출력과 TensorBoard 값입니다. 1 2.580 …
학습 곡선 (TensorBoard)
val 10,000장 기준, 노트북 출력과 TensorBoard 값입니다.
에폭
train loss
train acc
val acc
1
2.580
0.423
0.462
2
2.421
0.316
0.394
3
2.329
0.287
0.459 (← cifar10_best.pth)
4
2.304
0.303
0.338
5
2.280
0.305
0.373
6
2.193
0.308
0.343
7
2.143
0.321
0.448
8
2.259
0.307
0.426 (early stopping)
대표 지표는 저장한 best 가중치(3 에폭)의 val accuracy 0.4589로 적었습니다. test accuracy는 재지 않음 [미확인]
[🚩AI 설명] val loss가 0.004 수준으로 train loss(2.3)와 단위가 다른데, 검증 루프에서 손실을 더하지 않고 마지막 배치 값으로 덮어쓴 뒤(val_loss = loss.item()) 배치 수로 나눠서입니다. 그래서 early stopping 기준이 사실상 마지막 배치 손실이었습니다.
[🚩AI 설명] lr 3e-3은 사전학습 분류기를 고치기에 큰 값이라 train accuracy가 1 에폭 이후 떨어진 원인 후보입니다. 확인하지는 않았습니다.
추론 성능 (CPU / GPU)
측정 안 함.
장비
장비 이름
배치 크기
지연 시간 (샘플당, p50 / p95)
처리량 (샘플/초)
메모리 사용
CPU
[미확인]
-
측정 안 함
측정 안 함
측정 안 함
GPU
[미확인]
32
측정 안 함 (학습 중 tqdm 3.1 ~ 3.6 it/s)
측정 안 함
측정 안 함
한계 · 배운 점한계 알려진 실패 유형: 학습이 진행될수록 train accuracy가 떨어짐 (0.42 → 0.31) 편향 / 공정성 이슈:…
from torchvision.models import vgg16, VGG16_Weights
model = vgg16(weights=VGG16_Weights.DEFAULT)
for param in model.features.parameters():
param.requires_grad = False
model.classifier[-1] = nn.Linear(in_features=4096, out_features=10)
In [3]학습 루프 (요약)
optim = Adam(model.parameters(), lr=3e-3)
criterion = nn.CrossEntropyLoss()
writer = SummaryWriter(log_dir='runs/cifar10')
epochs, patience = 10, 5
for epoch in range(epochs):
model.train()
for data, label in tqdm.tqdm(train_loader):
optim.zero_grad()
pred = model(data.to(device))
loss = criterion(pred, label.to(device))
loss.backward()
optim.step()
# 검증 → writer.add_scalar(...) → val_loss가 줄면 cifar10_best.pth 저장, 5번 연속 안 줄면 중단
Out[3] 출력 보기
Epoch 1 / 10
Train Loss : 2.5797
Train ACC : 0.4228
Val ACC : 0.4622
Best Model Saved!!
...
Epoch 8 / 10
Train ACC : 0.3072
Val ACC : 0.4255
Early Stopping