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

샘플 시험 3번 손으로 풀기와 자주 나오는 오류 ★★★

이제 시험 문제를 풀 준비가 됐어요. 문제 내용은 이래요. 모델이 입력 특성 3개를 출력 특성 2개로 바꾸고, 빈칸 (A)에는 층을 만드는 코드, (B)에는 forward가 돌려줄 값을 써야 해요. 입력은 torch.ones(4, 3)이고 출력 크기가 (4, 2)가 되어야 해요.

class MyModel(nn.Module): def __init__(self): super().__init__() self.fc = __________ # (A) def forward(self, x): return __________ # (B)
  1. (A) 찾기 — 입력 3개, 출력 2개이니 nn.Linear(3, 2)예요. 보기 ①의 (2, 3)은 순서가 뒤집혔어요. 보기 ④의 (4, 2)는 배치 크기 4를 입력 특성으로 착각한 거예요.
  2. (B) 찾기 — 층에 x를 넣어야 계산돼요. self.fc(x)가 맞아요. self.fc만 쓰면 층 상자 자체를 돌려줄 뿐 계산하지 않아서 보기 ③은 오답이에요.
  3. model(x)의 호출 과정 — "상속받은 __call__()의 호출 처리를 거쳐 forward() 실행"이 맞아요. "__init__()을 다시 실행"은 보기 ②, ④에 있는데 둘 다 틀려요.

세 조건을 모두 만족하는 것은 (A) nn.Linear(3, 2), (B) self.fc(x), 호출 과정은 __call__ 경유인 ⑤번이에요.

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

표로 된 보기는 열마다 지우는 방식으로 풀어요. (A) 열에서 입력→출력 순서가 틀린 보기를 지우고, (B) 열에서 괄호나 x가 빠진 보기를 지우고, 마지막 열에서 "__init__ 다시 실행"을 지우면 하나만 남아요.

마지막으로 교수님 자료에 나온 자주 발생하는 오류 3가지를 정리해요. 실제로 실행해서 나온 메시지예요.

실수나오는 오류이유
super().__init__()을 빼먹음AttributeError ("cannot assign module before Module.__init__() call")부모의 준비가 안 돼서 층을 등록할 수 없어요.
forward를 정의하지 않음NotImplementedError ("missing the required forward function")model(x)가 실행할 계산 흐름이 없어요.
Linear 입력 크기와 데이터가 안 맞음RuntimeError ("mat1 and mat2 shapes cannot be multiplied")nn.Linear(4, 3)에는 마지막 차원이 4인 데이터를 넣어야 해요.
잠깐 확인 — nn.Linear(4, 3)에 (2, 5) 크기의 데이터를 넣으면?

오류가 나요. 마지막 차원이 5인데 Linear는 4를 기대해서 곱셈이 안 되기 때문이에요. 이때 오류 메시지에 "2x5 and 4x3"처럼 두 크기가 찍혀요.

다음 카드 → 이 장 3줄 요약

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