AI_beginner/
└── 01_sine_mlp/
├── model.py # 신경망 구조
├── train.py # 데이터 생성 및 학습
└── outputs/ # 학습 결과 저장 => 사진으로
위와 같은 구조로 설계했으며 train.py이 main과 같은 역학로 model.py를 import하는 구조

SineMLP: 이 class가 model구조를 서술
forward:
이걸 통해 NN이 실행되면서 루프를 돔
ReLU 기반 MLP(완전연결 신경망)구조
import torch
import torch.nn as nn
class SineMLP(nn.Module):
def __init__(self):
super().__init__()
self.network = nn.Sequential(
nn.Linear(1, 32), # 입력 1개 → 뉴런 32개
nn.ReLU(),
nn.Linear(32, 32),
nn.ReLU(),
nn.Linear(32, 1) # 뉴런 32개 → 출력 1개
)
def forward(self, x):
return self.network(x)
# 1. 순전파(forward): 현재 가중치로 예측
y_prediction = model.forward(x_train)
=> 이전의 가중치를 기반으로 forward한 방향으로 예측값을 계산함
# 2. 예측값과 정답의 오차 계산
loss = loss_function(y_prediction, y_train)
=> loss_function = torch.nn.MSELoss()로 정의했기에 이를 기반으로 값 계산
# 3. 이전 반복에서 저장된 기울기 초기화
optimizer.zero_grad()
=> 변수 정리
# 4. 역전파(backward): Loss를 기준으로 각 weight의 기울기 계산
loss.backward()
=> 역전파를 기반으로 각 지점에서의 weight를 계산
# 5. 계산된 기울기를 이용해 weight와 bias 수정
optimizer.step()
⇒ 즉 MLP는 가장 기본적으로 상태값을 기반으로 NN 가중치를 수정하는 단순구조