실제 데이터는 굉장히 크기때문에 큰 데이터를 한번에 이용해서 모델을 학습시키에는 비용이 많이 든다. 따라서 우리는 mini batch를 통해서 더 빠른 업데이트와 비용을 통해 모델을 학습시키곤 한다.
Mini batch란?
: 큰 데이터를 특정 크기의 batch로 나누는 것을 말한다.
Mini batch Gradient란?
: 특정 크기로 나누어진 데이터를 하나씩 사용해서 모델을 점진적으로 학습시키는 것을 말한다.
코드를 이용한 Mini batch Gradient
from torch.utils.data import Dataset
: 데이터셋을 구조화하고 관리하기 위한 기본적인 틀을 제공하는 클래스이다. 이 클래스를 상속받아 사용자 정의 데이터셋을 만들 수 있고, 데이터 로딩 및 전처리 과정을 간편하게 수행할 수 있게 도와준다.
from torch.utils.data import DataLoader
: 데이터셋을 효율적으로 로드하고 배치 단위로 처리할 수 있도록 도와주는 유틸리티 클래스이다.
import torch
import torch.optim as optim # 쉬운 Gradient 계산
import torch.nn.functional as F # loss 함수 제공 -> loss 함수 변경에 용이
import torch.nn as nn # 파라미터 관리와 모듈의 재사용성을 통해 효율적이고 유지보수가 용이
from torch.utils.data import Dataset
from torch.utils.data import DataLoader
class MultivariateLinearRegressionModel(nn.Module):
def __init__(self):
super().__init__()
self.linear = nn.Linear(3, 1) # 입력 차원 3, 출력 차원 1
def forward(self, x): # Hyepothersis 계산
return self.linear(x)
# (1) - 1 데이터 셋 정의
class CustomDataset(Dataset):
def __init__(self):
self.x_data = [[73, 80, 75],
[93, 88, 93],
[89, 91, 90],
[96, 98, 100],
[73, 66, 70]]
self.y_data = [[152], [185], [180], [196], [142]]
def __len__(self): # 데이터셋의 총 데이터 수
return len(self.x_data)
def __getitem__(self, idx): # 어떤 인덱스 idx를 받았을 때, 그에 상응하는 입출력 데이터 반환
x = torch.FloatTensor(self.x_data[idx])
y = torch.FloatTensor(self.y_data[idx])
return x, y
dataset = CustomDataset()
# (1) - 2 데이터셋 배치 설정
dataloader = DataLoader(
dataset,
batch_size=2, # 배치 설정(보통 2의 배수로 설정)
shuffle=True, # 모델이 순서를 외우지 못하도록 데이터셋을 셔플
)
# (2) 모델 초기화 및 정의
model = MultivariateLinearRegressionModel()
# (3) optimizer 설정
optimizer = optim.SGD(model.parameters(), lr=1e-5)
nb_epochs = 20
for epoch in range(nb_epochs + 1):
for batch_idx, samples in enumerate(dataloader): # minibatch 인덱스와 데이터를 loop
#(4) Hypothesis 계산
Hypothesis = model(x_train)
#(5) Cost 계산(MSE)
cost = F.mse_loss(Hypothesis, y_train)
#(6) Gradient descent
optimizer.zero_grad()
cost.backward()
optimizer.step()
print('Epoch {:4d}/{} Batch {}/{} Cost: {:.6f}'.format(
epoch, nb_epochs, batch_idx+1, len(dataloader),
cost.item()
))
'모두의 딥러닝 > 강의자료 정리' 카테고리의 다른 글
Lab_06(준비): Cross Entropy 손실함수 (3) | 2025.01.20 |
---|---|
Lab_05: Logistic Regression (1) | 2025.01.16 |
Lab_04-1: Multivariable Linear regression (0) | 2025.01.15 |
Lab_03: Deeper Look at Gradient Descent (1) | 2025.01.15 |
Lab_02: Linear regression (0) | 2025.01.06 |