이제 데이터에 맞춰 모델을 학습하고, 검증 및 테스트할 차례이다. 이 과정은 여러 반복 단계를 거치며, 각 단계에서 모델은 추측을 하고, 손실을 계산한 후 경사하강법을 사용해 매개변수를 최적화한다.
FashionMNIST 데이터를 로드하고, NeuralNetwork 클래스를 정의하여 신경망 모델을 생성한다.
import torch
from torch import nn
from torch.utils.data import DataLoader
from torchvision import datasets, transforms
training_data = datasets.FashionMNIST(
root="data", train=True, download=True, transform=transforms.ToTensor()
)
test_data = datasets.FashionMNIST(
root="data", train=False, download=True, transform=transforms.ToTensor()
)
train_dataloader = DataLoader(training_data, batch_size=64)
test_dataloader = DataLoader(test_data, batch_size=64)
class NeuralNetwork(nn.Module):
def __init__(self):
super().__init__()
self.flatten = nn.Flatten()
self.linear_relu_stack = nn.Sequential(
nn.Linear(28*28, 512),
nn.ReLU(),
nn.Linear(512, 512),
nn.ReLU(),
nn.Linear(512, 10),
)
def forward(self, x):
x = self.flatten(x)
return self.linear_relu_stack(x)
model = NeuralNetwork()
모델 학습에 필요한 조절 가능한 매개변수이다:
learning_rate = 1e-3
batch_size = 64
epochs = 5
최적화 단계는 학습 단계와 검증 단계로 나뉜다.
손실 함수: 예측과 실제 값의 차이를 측정하는 함수로, nn.CrossEntropyLoss를 사용한다
python
Copy code
loss_fn = nn.CrossEntropyLoss()
옵티마이저(Optimizer): 경사하강법을 통해 모델 매개변수를 조정한다. 여기서는 SGD를 사용한다.
optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)
학습 루프:
optimizer.zero_grad(): 변화도를 초기화loss.backward(): 손실의 변화도를 계산optimizer.step(): 매개변수를 업데이트