예:
3 → 8 → 4 → 2
의미:
각 Layer를 지날 때 x가 누적되는 게 아니라 새로운 값으로 변환된다.
(3,)
↓
(8,)
↓
(4,)
↓
(2,)
Batch가 1개라면:
[1,3]
↓
[1,8]
↓
[1,4]
↓
[1,2]
앞 숫자 = Batch Size
뒤 숫자 = Feature 수
nn.Linearnn.Linear(3, 4)
의미:
Feature 3개를 받아 Feature 4개로 변환
Weight Shape:
[out_features, in_features]
따라서:
Linear(3,4)
→ Weight Shape = [4,3]
→ Bias Shape = [4]
x = self.relu(x)
ReLU는 값은 바꾸지만 Shape는 바꾸지 않는다.
[1,4]
↓ ReLU
[1,4]
기본 Linear 계산:
z = wx + b
PyTorch에서는 기본적으로:
nn.Linear(3, 4, bias=True)
Bias를 사용한다.
Bias 역할:
Weighted Sum 전체를 이동시키는 값
일부 Batch Normalization 구조에서는 Bias를 생략하기도 한다.
예:
3 → 4 → 2
3 → 6 → 2
3 → 8 → 2
Hidden Size가 증가하면:
하지만 마지막 Output Feature가 같으면 최종 Output Shape도 같다.
3 → 8 → 2
→ Hidden Size 증가
→ 모델의 폭(Width) 증가
3 → 4 → 4 → 2
→ Hidden Layer 추가
→ 모델의 깊이(Depth) 증가
신경망에서 학습되는 대표적인 값:
Parameter 개수 예:
Linear(3,4)
Weight = 4×3 = 12
Bias = 4
총 16개
.named_parameters()for name, param in model.named_parameters():
PyTorch nn.Module에 이미 정의되어 있는 메서드.
모델 내부의 학습 가능한 Parameter를 찾아:
이름 + Parameter
를 반환한다.
예:
fc1.weight
fc1.bias
fc2.weight
fc2.bias
.parameters()model.parameters()
Parameter만 반환한다.
차이:
named_parameters()
→ 이름 + Parameter
parameters()
→ Parameter
Optimizer에서 중요:
optimizer = torch.optim.Adam(
model.parameters()
)
.numel()Tensor 안에 있는 전체 원소 개수.
Shape [4,3]
→ 4 × 3
→ 12개
전체 모델 Parameter 수:
sum(
p.numel()
for p in model.parameters()
)
nn.Sequentialmodel = nn.Sequential(
nn.Linear(3, 4),
nn.ReLU(),
nn.Linear(4, 1)
)
Layer를 적어놓은 순서대로 실행해주는 PyTorch 컨테이너.
Input
↓
Linear
↓
ReLU
↓
Linear
↓
Output
간단한 모델이라면 별도의 forward()를 직접 작성하지 않아도 된다.
Input
→ 모델에 넣는 데이터
Prediction
→ 모델이 계산한 예측값
Target
→ 실제 정답
기본 흐름:
Input
↓
Model
↓
Prediction
↓
Target과 비교
torch.no_grad()with torch.no_grad():
prediction = model(x)
의미:
Gradient 계산을 위한 기록을 만들지 않고 계산
주로:
등에 사용.
.item()원소 하나짜리 Tensor에서 실제 Python 숫자를 꺼낸다.
tensor([[0.35]])
↓
.item()
↓
0.35
torch.abs()절댓값.
difference = torch.abs(
prediction - target
)
예:
Prediction = 0.3
Target = 1.0
차이 = |-0.7|
= 0.7
이번 실습에서는 정식 Loss가 아니라 단순 차이 확인용.
model[0].weight += 0.1
처럼 Weight를 바꾸면 같은 Input이어도 Prediction이 달라진다.
같은 Input
+
다른 Weight
↓
다른 Prediction
이게 실제 학습 원리와 연결된다.
Input
↓
Model
↓
Prediction
↓
Target과 비교
↓
Loss
↓
Gradient
↓
Optimizer
↓
Weight / Bias 수정
↓
다시 Prediction
오늘까지 배운 내용이 다음 단계인:
Loss
→ backward()
→ Gradient
→ Optimizer
로 이어진다.
여러 데이터를 한꺼번에 모델에 넣는 것.
예:
Input Shape = [3,3]
의미:
데이터 3개
각 데이터 Feature 3개
모델:
3 → 4 → 1
이라면:
[3,3]
↓
[3,4]
↓
[3,1]
이 된다.
Grafana(그라파나)는 오픈소스 시각화·모니터링 대시보드 도구.
주로:
등을 Dashboard로 본다.
핵심:
Grafana = 데이터를 저장하는 DB라기보다 데이터를 가져와 시각화·모니터링하는 도구
Matplotlib
→ Python에서 분석 결과 그래프 생성
→ 분석/과제/연구
Grafana
→ 지속적으로 변하는 데이터를 Dashboard로 표시
→ 서비스/서버/운영 모니터링
Grafana와 별개의 도구.
Graphite
→ 시계열 데이터 저장·조회
Grafana
→ 데이터를 Dashboard로 시각화
둘을 연결해 사용할 수도 있다.
데이터
↓
Graphite
↓
Grafana
↓
Dashboard
DNS = Domain Name System
역할:
Domain 이름을 IP 주소로 변환
예:
google.com
↓
DNS
↓
IP 주소
↓
Google 서버 접속
비유:
사람 이름 → 전화번호
Domain → IP 주소