본문 바로가기
AI Framework/PyTorch

[PyTorch] 4주차: 신경망 기본 구조

by cogito21_python 2024. 5. 30.
반응형

강의 목표

  • 신경망의 기본 개념 이해
  • PyTorch에서 신경망 모델을 구현하는 방법 습득
  • 기본 신경망 구성 요소와 활성화 함수 이해

강의 내용

1. 신경망 기본 개념

  • 신경망이란 무엇인가?
    • 신경망(Neural Network)은 인간의 뇌 구조를 모방한 기계 학습 모델입니다.
    • 여러 개의 레이어로 구성되며, 각 레이어는 여러 뉴런(Neuron)으로 이루어져 있습니다.
  • 신경망의 구성 요소
    • 레이어(Layer)
    • 뉴런(Neuron)
    • 가중치(Weights)와 바이어스(Biases)
  • 활성화 함수(Activation Function)
    • 활성화 함수는 뉴런의 출력 값을 결정하는 함수입니다.
    • 비선형 활성화 함수의 중요성

2. PyTorch에서의 신경망 구현

  • torch.nn 모듈 소개
    • 신경망 모델을 쉽게 구축할 수 있도록 다양한 레이어와 함수 제공
  • nn.Module 클래스
    • 모든 신경망 모델의 기본 클래스
    • 모델 정의 및 순전파(forward) 정의 방법
     
import torch
import torch.nn as nn
import torch.optim as optim

class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(10, 50)
        self.fc2 = nn.Linear(50, 1)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

 

3. 기본 신경망 모델 구성

  • nn.Sequential 사용
    • 순차적으로 레이어를 쌓아 간단한 신경망 모델을 구축
     
model = nn.Sequential(
    nn.Linear(10, 50),
    nn.ReLU(),
    nn.Linear(50, 1)
)
  • 활성화 함수 사용 예시
    • Sigmoid, Tanh, ReLU
     
x = torch.randn(10)
relu = nn.ReLU()
sigmoid = nn.Sigmoid()
tanh = nn.Tanh()

print(relu(x))
print(sigmoid(x))
print(tanh(x))

 

4. 신경망 모델 학습

  • 손실 함수(Loss Function)와 옵티마이저(Optimizer)
    • 손실 함수: 모델의 예측값과 실제값의 차이를 측정
      • 예시: nn.MSELoss(), nn.CrossEntropyLoss()
    • 옵티마이저: 손실을 줄이기 위해 가중치를 업데이트
      • 예시: optim.SGD, optim.Adam
     
# 손실 함수와 옵티마이저 설정
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
  • 모델 학습 단계
    • 순전파(forward pass): 입력 데이터를 모델에 통과시켜 예측값을 계산
    • 손실 계산: 예측값과 실제값의 차이 계산
    • 역전파(backward pass): 기울기 계산
    • 가중치 업데이트: 옵티마이저를 통해 가중치 조정
     
# 학습 예시
inputs = torch.randn(10)
targets = torch.randn(1)

for epoch in range(100):  # 100번의 에포크 동안 학습
    optimizer.zero_grad()  # 옵티마이저 초기화
    outputs = model(inputs)  # 순전파
    loss = criterion(outputs, targets)  # 손실 계산
    loss.backward()  # 역전파
    optimizer.step()  # 가중치 업데이트

 

5. 실습 및 과제

  • 실습 과제
    • 간단한 신경망 모델을 구축하고, 주어진 데이터를 사용해 학습 및 평가
# 실습 과제 예시
# 1. 10개의 입력 특징을 가진 데이터셋을 사용하여, 간단한 신경망 모델을 구축하고 학습하세요.
import torch
import torch.nn as nn
import torch.optim as optim

# 데이터 생성
inputs = torch.randn(100, 10)  # 100개의 샘플, 각 샘플은 10개의 특징
targets = torch.randn(100, 1)  # 100개의 샘플에 대한 타겟 값

# 모델 정의
model = nn.Sequential(
    nn.Linear(10, 50),
    nn.ReLU(),
    nn.Linear(50, 1)
)

# 손실 함수와 옵티마이저 설정
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)

# 모델 학습
for epoch in range(100):  # 100번의 에포크 동안 학습
    optimizer.zero_grad()  # 옵티마이저 초기화
    outputs = model(inputs)  # 순전파
    loss = criterion(outputs, targets)  # 손실 계산
    loss.backward()  # 역전파
    optimizer.step()  # 가중치 업데이트

# 모델 평가
with torch.no_grad():
    test_inputs = torch.randn(10, 10)  # 10개의 테스트 샘플
    test_outputs = model(test_inputs)
    print(test_outputs)
  • 과제 제출
    • Jupyter Notebook 파일로 제출
    • 제출 기한: 다음 강의 시작 전까지
반응형