시험공부빅데이터분석
← 보드nn.Module로 모델 만들기 · 1/8

모델은 클래스예요 — nn.Module 뼈대 ★★★

앞 장에서 클래스(설계도)와 상속(부모의 기능을 물려받기)을 배웠죠. PyTorch에서 모델을 만들 때는 부모 클래스 nn.Module을 물려받아서 나만의 모델 클래스를 만들어요. nn.Module에는 모델이 일하는 데 필요한 기본 기능이 이미 들어 있어요.

비유

모델은 계산기 상자예요. 상자를 만들 때(__init__) 안에 쓸 부품(층)을 넣어 두고, 숫자가 들어오면(forward) 어떤 순서로 계산해서 결과를 내보낼지 적어 둬요. 교수님 자료도 __init__은 층과 구성 요소를 정의하고 등록하는 곳, forward는 입력에서 출력까지의 계산 흐름을 정의하는 곳이라고 정리했어요.

import torch from torch import nn class MyModel(nn.Module): # nn.Module을 물려받는다 def __init__(self): super().__init__() # 부모 준비를 가장 먼저 # 여기서 층(layer)을 만들어 self에 붙인다 def forward(self, x): # 입력 x가 들어오면 어떻게 계산할지 쓴다 return x # 계산 결과를 돌려준다
코드 줄무슨 뜻
class MyModel(nn.Module):"MyModel은 nn.Module의 자식이다."
def __init__(self):모델을 처음 만들 때 한 번 실행되는 곳. 층을 만들어 두는 자리예요.
super().__init__()부모(nn.Module)의 준비 작업을 실행해요. 층과 파라미터를 관리할 준비를 하는 거예요.
def forward(self, x):입력 x에서 출력까지의 계산 흐름을 쓰는 곳. 이름은 꼭 forward여야 해요.
return x계산 결과를 내보내요.

왜 super().__init__()을 맨 앞에 쓸까요? 자식 클래스가 __init__을 직접 만들면 부모의 __init__은 자동으로 실행되지 않아요. 그래서 "부모 것도 실행해 줘"라고 직접 불러야 해요. 안 부르면 층을 붙이는 순간 오류가 나요.

외우기 팁

모델 뼈대 3줄은 클래스 이름 뒤에 (nn.Module) / 첫 줄에 super().__init__() / 계산은 forward예요.

이렇게 고르세요 (풀이 요령)

모델 코드가 나오면 먼저 세 가지를 확인하세요. ① (nn.Module)을 물려받았는지 ② __init__ 맨 앞에 super().__init__()이 있는지 ③ 계산이 forward 안에 있는지. 보기에서 "층은 __init__에서 만들고 계산 흐름은 forward에서 정의한다"는 문장이 맞는 설명이에요.

잠깐 확인 — __init__ 안에서 super().__init__()을 빼먹고 self.fc = nn.Linear(3, 2)를 쓰면 어떻게 될까요?

오류가 나요. 직접 실행해 보면 "cannot assign module before Module.__init__() call"이라는 메시지가 나와요. 부모의 준비 작업이 끝나기 전에는 층을 붙일 수 없다는 뜻이에요.

다음 카드 → 가장 쉬운 한 층 모델 — x @ W.T + B ★★★

자료: 3·6주차 · Week03_Class_for_PyTorch(업데이트), Week04_Autograd_Loss_Optimizer · 6주차 녹취(빅데이터06), 7주차 녹취(빅데이터07)