PyTorch DNN기초 - 공유
PyTorch DNN기초 - 공유에서 직접 따라간 구현 흐름과 코드 증거를 다시 볼 수 있게 정리한 DL 학습 기록입니다. 본문은 실제 데이터 모델링, 문제: 실험하기, 다중분류 순서로 핵심 장면을 먼저 훑고, 실제 데이터 모델링, 다중분류, 유방암데이터 같은 코드로 실제 구현을 이어서 확인할 수 있습니다. md 원본과 20개 코드 블록, 13개 실행 셀을 함께 남겨 구현 흐름을 다시 따라갈 수 있게 정리했습니다. 주요 스택은 torch, sklearn, matplotlib, torchmetrics입니다.
빠르게 볼 수 있는 포인트: 실제 데이터 모델링, 문제: 실험하기, 다중분류.
남겨둔 자료: md 원본과 20개 코드 블록, 13개 실행 셀을 함께 남겨 구현 흐름을 다시 따라갈 수 있게 정리했습니다. 주요 스택은 torch, sklearn, matplotlib, torchmetrics입니다.
주요 스택: torch, sklearn, matplotlib, torchmetrics, numpy
Snapshot
| Item | Value |
|---|---|
| Track | DL |
| Type | Shared Note |
| Source Files | md |
| Code Blocks | 20 |
| Execution Cells | 13 |
| Libraries | torch, sklearn, matplotlib, torchmetrics, numpy |
| Source Note | 4-1_PyTorch_DNN기초 - 공유 |
What This Note Covers
실제 데이터 모델링
torchmetrics
- 읽을 포인트: 모델 정의, 손실, 최적화 흐름을 코드로 연결해 보는 구간입니다.
문제: 실험하기
각 레이어의 노드는 100개 일때, 아래 모델들을 실험해보세요 HiddenLayer 1개, activation sigmoid 함수 - HiddenLayer 3개, activation sigmoid 함수 - HiddenLayer 10개, activation sigmoid 함수 - HiddenLayer 10개, activation rel…
- 읽을 포인트: 문제: 실험하기 아래 코드와 함께 읽으면 구현 포인트가 더 또렷해지는 구간입니다.
다중분류
다중분류 코드를 직접 따라가며 다중분류 흐름을 확인했습니다.
- 읽을 포인트: 다중분류 아래 코드와 함께 읽으면 구현 포인트가 더 또렷해지는 구간입니다.
유방암데이터
유방암데이터 코드를 직접 따라가며 유방암데이터 흐름을 확인했습니다.
- 읽을 포인트: 유방암데이터 아래 코드와 함께 읽으면 구현 포인트가 더 또렷해지는 구간입니다.
와인 데이터
와인 데이터 코드를 직접 따라가며 와인 데이터 흐름을 확인했습니다.
- 읽을 포인트: 와인 데이터 아래 코드와 함께 읽으면 구현 포인트가 더 또렷해지는 구간입니다.
Why This Matters
데이터 파이프라인
- 왜 필요한가: 모델 성능 이전에 입력이 일정한 형식으로 잘 들어가야 학습과 평가가 안정적으로 반복됩니다.
- 왜 이 방식을 쓰는가: Dataset/DataLoader 구조는 데이터 읽기, 변환, 배치 처리를 분리해 코드 재사용성과 실험 반복성을 높여줍니다.
- 원리: 각 샘플을 Dataset이 제공하고, DataLoader가 이를 배치로 묶어 셔플·병렬 로딩·collate를 담당합니다.
학습 루프와 최적화
- 왜 필요한가: 모델을 한 번 정의했다고 바로 학습되는 것이 아니라, 손실을 계산하고 가중치를 반복적으로 갱신하는 루프가 필요합니다.
- 왜 이 방식을 쓰는가: optimizer와 scheduler를 명시적으로 두면 학습률 변화와 갱신 방식을 실험별로 비교하기 쉬워집니다.
- 원리: 예측값과 정답의 차이로 손실을 계산하고, 역전파로 기울기를 구한 뒤 optimizer가 가중치를 업데이트합니다.
Implementation Flow
- 실제 데이터 모델링: torchmetrics
- 문제: 실험하기: 각 레이어의 노드는 100개 일때, 아래 모델들을 실험해보세요 HiddenLayer 1개, activation sigmoid 함수 - HiddenLayer 3개, activation sigmoid 함수 - HiddenLayer 10개, activ…
- 다중분류: 다중분류 코드를 직접 따라가며 다중분류 흐름을 확인했습니다.
- 유방암데이터: 유방암데이터 코드를 직접 따라가며 유방암데이터 흐름을 확인했습니다.
- 와인 데이터: 와인 데이터 코드를 직접 따라가며 와인 데이터 흐름을 확인했습니다.
Code Highlights
실제 데이터 모델링
실제 데이터 모델링는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 Step 3. 모델 학습시키기 흐름이 주석과 함께 드러납니다.
### Step 3. 모델 학습시키기
LR = 1e-1
criterion = torch.nn.BCELoss()
optimizer = torch.optim.SGD(model.parameters(), lr=LR)
EPOCH = 100
BATCH_SIZE = 210
dataset = TensorDataset(X_train, y_train)
dataloader = DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=True)
losses = []
for epoch in range(EPOCH):
for batch_X, batch_y in dataloader:
optimizer.zero_grad()
outputs = model(batch_X)
loss = criterion(outputs, batch_y)
loss.backward()
optimizer.step()
losses.append(loss.item())
plt.plot(range(1, EPOCH+1), losses)
plt.xlabel("Epoch")
plt.ylabel("Loss")
plt.show()
다중분류
다중분류는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 학습 설정, 데이터 로더 생성, 학습 루프 흐름이 주석과 함께 드러납니다.
# 학습 설정
EPOCH = 50
BATCH_SIZE = 32
# 데이터 로더 생성
dataset_train = TensorDataset(X_train, y_train)
dataset_val = TensorDataset(X_val, y_val)
dataloader_train = DataLoader(dataset_train, batch_size=BATCH_SIZE, shuffle=True)
dataloader_val = DataLoader(dataset_val, batch_size=BATCH_SIZE)
losses = []
val_losses = []
# 학습 루프
for epoch in range(EPOCH):
model.train()
for batch_X, batch_y in dataloader_train:
optimizer.zero_grad()
outputs = model(batch_X) # Logits 반환
loss = criterion(outputs, batch_y) # CrossEntropyLoss 적용
loss.backward()
optimizer.step()
losses.append(loss.item())
# 검증 손실 계산
model.eval()
with torch.no_grad():
# ... trimmed ...
유방암데이터
유방암데이터는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 유방암 데이터 로드 및 학습/검증 세트 분리 흐름이 주석과 함께 드러납니다.
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# 유방암 데이터 로드 및 학습/검증 세트 분리
cancer = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
cancer.data, cancer.target, test_size=0.3, shuffle=True, random_state=42
)
와인 데이터
와인 데이터는 이 노트에서 핵심 구현을 보여주는 코드 블록입니다. 코드 안에서는 데이터 로드 및 학습/검증 세트 분리 흐름이 주석과 함께 드러납니다.
import torch
import torch.nn as nn
import torch.optim as optim
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
import numpy as np
# 데이터 로드 및 학습/검증 세트 분리
wine = load_wine()
X_train, X_test, y_train, y_test = train_test_split(
wine.data, wine.target, test_size=0.3, shuffle=True, random_state=42
)
Source Bundle
- Source path:
12_Deep_Learning/Code_Snippets/4-1_PyTorch_DNN기초 - 공유.md - Source formats:
md - Companion files:
4-1_PyTorch_DNN기초 - 공유.md - Note type:
code-note - Last updated in the source vault:
2026-03-08T03:33:14 - Related notes:
12_Deep_Learning_Code_Summary.md - External references:
lightning.ai,localhost
Note Preview
- torchmetrics