강의자료 · 인공지능응용

10주차 · 이미지 분류의 학습과 평가 분리하기

실습 전에

01 새로운 데이터에서의 성능

예시 상황 연습한 사진을 잘 맞히는 모델이 처음 보는 사진도 잘 구분할지, 어떻게 확인할 수 있을까요?

설명
  • 학습 데이터의 적합도와 Generalization을 구분
  • 학습에 사용하지 않은 데이터로 성능 평가

02 틀린 예측에서 얻는 정보

예시 상황 모델이 몇 개를 맞혔는지 아는 것과 어떤 사진을 틀렸는지 보는 것은, 각각 무엇을 알려줄까요?

설명
  • 특정 Class나 입력 조건에 집중되는 오류
  • 데이터·Label의 문제와 모델의 한계
로컬 실행 준비
  • PyTorch·torchvision: 호환 버전을 함께 설치. Python 3.11 · PyTorch 2.12.1 · torchvision 0.27.1에서 실행 확인.
  • MNIST: 처음 실행할 때 인터넷 연결 필요. 다운로드 위치: mnist_data.
  • Mac의 python.org Python에서 CERTIFICATE_VERIFY_FAILED 발생 시: Applications의 해당 Python 폴더에서 Install Certificates.command 실행 후 재시도.

실습

1. MNIST와 실행 규모

  1. 데이터를 준비하는 셀을 실행하세요. train_data[0]에서 이미지의 shape와 Label을 출력하고, 이미지의 세 축이 무엇인지 적으세요.
  2. train_loader를 끝까지 순회해 Batch별 이미지 수를 리스트에 모으세요. 첫 Batch 크기·마지막 Batch 크기·전체 Batch 수를 적으세요.
  3. len(train_used)와 Batch Size 64로 예상한 마지막 Batch 크기를 계산해 출력값과 대조하세요.

2. CNN 학습과 평가

  1. QUICK_RUN=True인 데이터 셀과 CNN 학습·평가 셀을 차례로 실행하세요. 학습 epoch·학습 이미지 수·평가 이미지 수를 기록하세요.
  2. 학습 코드에서 model.train(), 평가 코드에서 model.eval()과 torch.no_grad()를 찾으세요. 각각 Dropout 동작과 Gradient 기록 중 무엇을 제어하는지 한 문장씩 설명하세요.

전체 데이터로 비교하고 싶다면 QUICK_RUN=False로 바꾼 뒤 데이터 셀부터 다시 실행할 수 있습니다.

3. 그래프와 오분류

  1. examples와 mistakes를 시각화한 결과의 정답·예측 Label을 각 이미지와 대조하세요. 맞힌 예와 틀린 예에서 어떤 숫자를 어떤 숫자로 예측했는지 적고, 틀린 이미지에서 눈에 띄는 특징을 설명하세요.
  2. 기록한 Test Accuracy 옆에 평가에 사용한 이미지 수를 적으세요. QUICK_RUN=True의 일부 표본 평가값인지, 전체 Test Set 평가값인지 구분합니다.

제출·저장

코드, 실제 Output·그래프, 직접 작성한 해석을 포함하세요. 제출은 KLAS를 이용하며 기한은 학기 일정과 최신 공지를 확인합니다.

파일명: 이름_학번_10주차.ipynb.

실행 환경을 다시 시작하고 전체 코드를 위에서부터 실행한 뒤 저장하세요.

선택 실습

Dropout을 켠 상태로 같은 영상을 두 번 평가한 경우

  1. CNN 학습과 평가까지 마친 뒤, 노트북 맨 아래에 Code Cell을 추가하고 다음 코드를 실행하세요.
    debug_image = test_used[0][0].unsqueeze(0)
    for training in [True, False]:
        model.train(training)
        with torch.no_grad():
            first = model(debug_image)
            second = model(debug_image)
        print("train" if training else "eval",
              "maximum difference:", (first - second).abs().max().item())
    model.eval()
  2. Text Cell에 각 mode의 최대 절대 차이를 적고, 같은 영상인데 출력이 달라지는 이유를 Dropout과 연결해 설명하세요. 이 코드는 Gradient 계산과 가중치 갱신 없이 평가하며, 끝난 뒤에는 eval mode입니다.