PyTorch는 딥러닝 프레임워크로서, 경사 하강법과 같은 최적화 알고리즘을 쉽게 적용할 수 있습니다. 이번 글에서는 PyTorch에서 경사 하강법을 적용하는 방법에 대해 알아보겠습니다.
- PyTorch 텐서 생성하기
가장 먼저 해야 할 일은 PyTorch 텐서를 생성하는 것입니다. 텐서는 딥러닝에서 데이터의 기본 단위로 사용되며, PyTorch에서는 torch.Tensor를 사용하여 텐서를 생성할 수 있습니다.
import torch
# 입력 데이터 생성
x = torch.tensor([1.0, 2.0, 3.0, 4.0], requires_grad=True)
# 타겟 데이터 생성
y = torch.tensor([2.0, 4.0, 6.0, 8.0])
- 모델 정의하기
경사 하강법을 적용하기 위해선 모델을 정의해야 합니다. PyTorch에서는 torch.nn.Module 클래스를 상속받아 모델을 정의할 수 있습니다. 모델은 주어진 입력에 대한 예측을 만들어 내는 함수로 구현됩니다.
import torch.nn as nn
class LinearRegression(nn.Module):
def __init__(self):
super(LinearRegression, self).__init__()
self.linear = nn.Linear(1, 1) # 입력 크기와 출력 크기를 지정
def forward(self, x):
return self.linear(x)
- 손실 함수 정의하기
손실 함수는 모델의 예측과 실제 타겟 값 사이의 차이를 계산하는 함수입니다. PyTorch에서는 torch.nn 패키지에 다양한 손실 함수를 제공합니다. 여기서는 평균 제곱 오차(Mean Squared Error, MSE)를 사용하도록 하겠습니다.
criterion = nn.MSELoss()
- 옵티마이저 정의하기
옵티마이저는 경사 하강법을 통해 모델의 가중치를 업데이트하는 역할을 합니다. PyTorch에서는 torch.optim 패키지에 다양한 옵티마이저를 제공하며, 여기서는 확률적 경사 하강법(SGD) 옵티마이저를 사용하도록 하겠습니다.
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
- 경사 하강법 적용하기
이제 모든 준비가 완료되었습니다. 경사 하강법을 적용하여 모델을 학습시킬 수 있습니다.
for epoch in range(100):
# Forward pass
outputs = model(x)
loss = criterion(outputs, y)
# Backward and optimize
optimizer.zero_grad()
loss.backward()
optimizer.step()
if (epoch+1) % 10 == 0:
print(f'Epoch [{epoch+1}/{100}], Loss: {loss.item():.4f}')
위의 코드에서는 100번의 에포크 동안 모델을 학습시키고, 매 에포크마다 손실 값을 출력하고 있습니다.
PyTorch를 사용하여 경사 하강법을 적용하는 방법에 대해 알아보았습니다. 이를 통해 모델의 가중치를 업데이트하여 학습시킬 수 있습니다. PyTorch는 딥러닝 프레임워크로서 강력한 도구들을 제공하므로, 딥러닝 모델을 구현할 때 유용하게 사용할 수 있습니다.
참고 자료: