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

nn.Linear(입력, 출력) — 같은 계산을 한 줄로 ★★★

W와 B를 매번 직접 만들고 x @ W.T + B를 쓰는 건 번거로워요. 그래서 PyTorch가 이 일을 해 주는 부품을 미리 만들어 뒀어요. 그게 nn.Linear예요. Linear는 "선형(일차식) 계산"이라는 뜻이에요.

한 줄 정의

nn.Linear(in_features, out_features) = 입력 특성 개수, 출력 특성 개수를 넣으면 W와 B를 자동으로 만들고, 호출하면 x @ W.T + B를 계산해 주는 층이에요.

fc = nn.Linear(3, 2) # 입력 특성 3개 → 출력 특성 2개 print(fc.weight.shape) print(fc.bias.shape) x = torch.ones(4, 3) # 데이터 4개, 특성 3개 print(fc(x).shape)
torch.Size([2, 3]) torch.Size([2]) torch.Size([4, 2])
코드 줄무슨 뜻
nn.Linear(3, 2)앞 숫자가 입력, 뒤 숫자가 출력이에요. 입력 3개를 출력 2개로 바꿔요.
fc.weight.shape자동으로 만들어진 가중치. 크기는 (출력, 입력) = (2, 3)이에요. 괄호 안 순서와 반대라서 헷갈리기 쉬워요.
fc.bias.shape편향. 크기는 (출력,) = (2,)예요.
fc(x)층도 함수처럼 부를 수 있어요. 결과 크기는 (4, 2)예요.
입력 3개 출력 2개 선 6개 = 가중치 3×2 = 6개, 출력마다 편향 1개 = 2개

입력 3개가 출력 2개와 모두 선으로 이어져요. 이 선 하나하나가 가중치이고, 출력 칸마다 편향이 하나씩 붙어요. 그래서 학습할 숫자(파라미터) 개수 = 입력 × 출력 + 출력이에요.

층계산파라미터 개수
nn.Linear(3, 2)3×2 + 28개
nn.Linear(8, 4)8×4 + 436개
nn.Linear(4, 6)4×6 + 630개
nn.Linear(6, 2)6×2 + 214개

이제 nn.Linear를 모델 클래스 안에 넣어 볼게요. 교수님이 수업에서 쓴 형태이고, 샘플 시험 3번도 이 모양이에요.

class MyModel(nn.Module): def __init__(self): super().__init__() self.fc = nn.Linear(in_features=3, out_features=2) def forward(self, x): return self.fc(x) model = MyModel() x = torch.ones(4, 3) y = model(x) print(tuple(y.shape)) for name, p in model.named_parameters(): print(name, tuple(p.shape))
(4, 2) fc.weight (2, 3) fc.bias (2,)
코드 줄무슨 뜻
self.fc = nn.Linear(3, 2)층 하나를 만들어 self.fc라는 이름으로 모델에 붙여요. 이렇게 붙이면 모델이 자동으로 기억해요.
return self.fc(x)x를 층에 넣은 결과를 돌려줘요. 괄호와 x를 꼭 써야 계산이 실행돼요.
model.named_parameters()학습할 숫자들을 이름과 함께 보여줘요. 이름은 fc.weight, fc.bias예요.

3주차의 직접 만든 방식과 4주차의 nn.Linear 방식을 비교하면 이래요.

구분직접 만들기nn.Linear 쓰기
만들기self.W, self.Bself.fc = nn.Linear(3, 2)
계산x @ self.W.T + self.Bself.fc(x)
값 접근model.W, model.Bmodel.fc.weight, model.fc.bias
등록된 이름W, Bfc.weight, fc.bias
외우기 팁

nn.Linear(입력, 출력)은 말하는 순서 그대로 써요("3개를 2개로"). 하지만 안에 든 weight는 (출력, 입력)이라 반대로 저장돼요. 문제에서 nn.Linear(2, 3)처럼 순서가 뒤집힌 보기는 오답이에요.

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

① 문제 설명에서 "입력 특성 몇 개 → 출력 특성 몇 개"를 찾아요. ② 그 순서대로 nn.Linear(입력, 출력)을 골라요. ③ 입력의 첫 숫자(torch.ones(4, 3)의 4)는 배치 크기라서 Linear 숫자와 상관없어요. 4와 3을 헷갈려 nn.Linear(4, 2)를 고르면 틀려요.

잠깐 확인 — nn.Linear(10, 5)의 weight 크기와 파라미터 개수는?

weight는 (5, 10)이고 bias는 (5,)예요. 파라미터는 10×5 + 5 = 55개예요.

다음 카드 → model(x)는 어떻게 forward를 실행할까 — __call__ ★★★

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