시험공부빅데이터분석
← 보드클래스와 상속 · 11/12

시험 샘플 3번 풀기 — 빈칸 (A), (B)와 호출 과정 ★★★

class MyModel(nn.Module): def __init__(self): super().__init__() self.fc = __________ # (A) def forward(self, x): return __________ # (B) model = MyModel() x = torch.ones(4, 3) y = model(x) print(tuple(y.shape)) # (4, 2)

조건은 "입력 특성 3개를 출력 특성 2개로 변환"하고 입력 x가 (4, 3), 출력이 (4, 2)예요.

선택지(A), (B)판정과 이유
①nn.Linear(2, 3), self.fc(x)틀림. 입력 2개 → 출력 3개라서 문제 조건(3 → 2)과 반대예요
②nn.Linear(3, 2), self.fc(x), __init__ 재실행틀림. (A), (B)는 맞지만 호출 과정이 틀려요. model(x)는 __init__을 다시 실행하지 않아요
③nn.Linear(3, 2), self.fc, __call__ → forward틀림. (B)에 괄호가 없어서 x가 계산에 쓰이지 않아요
④nn.Linear(4, 2), self.fc(x), __init__ 재실행틀림. 4는 batch 크기라서 입력 특성이 아니에요. 호출 과정도 틀려요
⑤nn.Linear(3, 2), self.fc(x)맞음 (정답). 호출 과정은 "상속받은 __call__()의 처리를 거쳐 forward() 실행"

선택지가 (A), (B), 호출 과정 세 부분으로 나뉘어 있어서 한 군데라도 틀리면 오답이에요. 위 표처럼 세 칸을 따로 확인하면 돼요.

이 모델에서 자주 하는 실수 세 가지도 알아 두세요(수업 자료의 "자주 발생하는 오류").

실수결과
super().__init__()을 부르지 않음nn.Module 내부 준비가 안 돼서 layer를 등록할 때 에러가 나요
forward()를 정의하지 않음model(x)가 실행할 계산이 없어 NotImplementedError
Linear의 입력 특성 수와 입력의 마지막 차원이 다름shape이 안 맞는다는 에러. 예를 들어 nn.Linear(4, 3)에는 마지막 차원이 4인 Tensor를 넣어야 해요
외우기 팁

모델 코드의 뼈대는 ① 부모(nn.Module) 상속 → ② __init__ 맨 앞에 super().__init__() → ③ self.층 = nn.Linear(입력, 출력) → ④ forward에서 self.층(x) → ⑤ 사용은 model(x)예요. 이 다섯 줄을 외워 두면 시험 3번은 풀려요.

시험엔 이렇게 써요 — 이렇게 고르세요

nn.Module을 상속한 모델은 __init__()에서 super().__init__()을 먼저 호출한 뒤 layer를 정의·등록하고, forward()에서 입력으로부터 출력까지의 계산 흐름을 정의한다. model(x)는 부모의 __call__()을 거쳐 forward()를 실행하므로 forward()를 직접 호출하지 않는다. nn.Linear(in, out)은 입력의 마지막 차원 in을 out으로 바꾼다. 빈칸 문제는 "(입력, 출력) 순서", "괄호로 호출", "__init__은 다시 실행되지 않음"을 차례로 확인하세요.

잠깐 확인 — (A)를 nn.Linear(4, 2)로 쓰면 y = model(x)에서 어떻게 되나요? (x는 (4, 3))

에러가 나요. Linear는 입력의 마지막 차원이 4일 것으로 기대하는데 x의 마지막 차원은 3이라서 shape이 맞지 않아요.

다음 카드 → 이 장 3줄 요약

자료: 3~4주차 · Week03_Class_for_PyTorch(pdf, ipynb 업데이트본) · 빅데이터03(3주차)·빅데이터04(4주차) 녹취