CCheckpointW1 · VISION
VISION / CNN제출 준비 중

W1

Deeplearning W1 Hackathon

아이콘 이미지 분류

이번 주 배운 CNN으로 32×32 아이콘 이미지를 10개 클래스로 분류합니다. 합성곱·풀링이 만든 표현을 실제 데이터로 검증하고, 과적합을 실험으로 진단합니다.

METRIC
Accuracy
LEVEL
초중급
EST. TIME
2시간
BASELINE
CNN

Start Here / Step 00

데이터와 제출 규격부터 확인하세요

32×32 흑백 이미지 · 픽셀 열 0~1023 (1,024개)

Dataset · Step 00

데이터셋 받기

train · test · sample_submission + 제출 안내(README) 한 번에. 원본 대회 가입 없이 시작합니다.

ZIP 받기

Output Contract

출력 함수 (선택)

save_checkpoint_result(
  ...,
  id_column="ID",
  target_column="label",
)
.py 받기

Starter / Step 00b

여기서 출발하세요

기준선 · Accuracy 0.79 (seed 0)

ZIP을 푼 폴더에서 그대로 실행하면 submission.csv가 만들어집니다. 완성된 답이 아니라 기준선입니다 — 먼저 제출해 점수를 확인하고, 아래 항목을 바꿔가며 개선하세요.

From the Lectures · 이 코드가 출발한 강의

12강 · 컴퓨터비전 입문 — CNN 기초
nn.Conv2d와 nn.MaxPool2d를 왜 겹쳐 쌓는지
13강 · 데이터 증강과 전이학습
이 코드의 원형(conv 32/64 + 은닉 128)과 증강 기법
3강 · 첫 신경망 5분 데모
/255.0 스케일 맞추기와 CrossEntropyLoss
9강 · 일반화와 최적화
과적합을 학습·검증 곡선으로 진단하기

dl-w1.py · PyTorch

import pandas as pd, torch, torch.nn as nn

torch.manual_seed(0)                           # 13강처럼 시드 고정 — 이게 없으면 돌릴 때마다
                                               # 점수가 흔들려 "내 개선이 효과가 있었나"를 못 가린다
tr, te = pd.read_csv("train.csv"), pd.read_csv("test.csv")
classes = sorted(tr["label"].unique())         # 10개 클래스 이름 — 정렬해야 매번 같은 순서

# CSV의 픽셀 1,024개(0~1023 열)를 32×32 격자로 되돌린다. Conv2d는 3강에서 쓴 한 줄짜리
# 목록이 아니라 (장수, 채널, 높이, 너비) 4차원을 받는다. 흑백이라 채널은 1.
# / 255.0은 0~255 정수를 0~1로 — 3강과 같은 이유(입력 스케일을 맞춰야 학습이 안정).
X = torch.tensor(tr.drop(columns=["ID", "label"]).values.reshape(-1, 1, 32, 32) / 255.0, dtype=torch.float32)
y = torch.tensor([classes.index(v) for v in tr["label"]])   # 클래스 이름 → 0~9 정수
Xt = torch.tensor(te.drop(columns=["ID"]).values.reshape(-1, 1, 32, 32) / 255.0, dtype=torch.float32)

# 13강 SmallCNN과 같은 얼개 — conv 32/64 + 은닉 128. 거기는 컬러(채널 3)·이진(출력 1),
# 여기는 흑백(채널 1)·10클래스(출력 10)라는 점만 다르다.
model = nn.Sequential(
    nn.Conv2d(1, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),         # 32×32 → 16×16
    nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),        # 16×16 → 8×8
    nn.Flatten(), nn.Linear(64 * 8 * 8, 128), nn.ReLU(), nn.Linear(128, len(classes)))
opt = torch.optim.Adam(model.parameters(), lr=1e-3)
lossf = nn.CrossEntropyLoss()                  # softmax를 손실 안에서 처리 (3강)

for epoch in range(15):                        # 먼저 돌려보고 조절하세요
    for i in range(0, len(X), 32):
        opt.zero_grad(); loss = lossf(model(X[i:i + 32]), y[i:i + 32]); loss.backward(); opt.step()
    print(epoch, round(loss.item(), 4))

pred = model(Xt).argmax(1)                     # 로짓이 가장 큰 칸 = 예측 클래스
pd.DataFrame({"ID": te["ID"], "label": [classes[i] for i in pred]}).to_csv("submission.csv", index=False)

Next Steps

  • 01검증 분할을 만들어 과적합이 언제 시작되는지 확인
  • 02augmentation·Dropout으로 일반화 성능 비교
  • 03필터 수·층 수·epoch를 바꿔가며 학습 곡선 관찰

Live Rankings

클래스 리더보드

이해 확인을 통과해 ranked가 된 제출만 표시합니다. 각 수강생의 최고 점수 1개만 순위에 반영됩니다.

순위 기록을 불러오는 중입니다.

Join the Board

제출 → 이해 확인 → 순위 공개

출력값은 서버가 다시 채점합니다. 객관식 3문항 중 2문항 이상과 80자 이상의 실험 회고를 제출하기 전까지 점수는 잠깁니다.

  1. 01CSV 검증현재
  2. 02서버 재채점대기
  3. 03이해 확인대기
  4. 04순위 공개대기

Submission Gate

제출 준비 중

미션 브리프는 먼저 확인할 수 있습니다. 강사가 비공개 평가셋과 제출 설정을 공개하면 CSV 제출과 이해 확인이 열립니다.

Learning Objectives

이번 미션에서 확인할 것

  1. 01이미지 tensor의 채널·높이·너비 계약을 검증한다.
  2. 02기본 CNN의 convolution과 pooling 역할을 결과와 연결한다.
  3. 03augmentation과 regularization이 일반화 성능에 미치는 영향을 비교한다.

Output Checklist

제출·학습 산출물

사이트에는 submission.csv만 업로드합니다. 나머지는 notebook에 남겨 수업 중 실험 근거로 설명합니다.

  • 사이트 제출submission.csv
  • 실험 기록재현 가능한 notebook
  • 실험 기록학습·검증 곡선
  • 실험 기록오분류 이미지 분석

Original Source

위 ZIP은 학습용 split입니다. 정답이 포함된 원본 전체는 아래 대회에서 확인하세요.

DACON · 236459 열기 ↗