확률적 경사 하강법 최적화 방식으로 신경망 모델을 훈련하려면 훈련 데이터를 무작위로 섞은 배치로 만들어 주입하는 것이 중요하다.
데이터 로더 객체의 batch_size 매개변수를 사용하여 배치 크기를 지정하는 방법을 보았음, 배치를 만드는 것 외에도 데이터셋을 섞거나 재순환하는 방법에 대해 알아본다.
먼저 joint_dataset 을 사용하여 셔플링된 데이터 로더를 만든다.
import torch
from torch.utils.data import DataLoader
from torch.utils.data import Dataset
torch.manual_seed(1)
t_x = torch.rand([4, 3], dtype=torch.float32)
t_y = torch.arange(4)
class JointDataset(Dataset):
def __init__(self, x, y):
self.x = x
self.y = y
def __len__(self):
return len(self.x)
def __getitem__(self, idx):
return self.x[idx], self.y[idx]
joint_dataset = JointDataset(t_x, t_y)
data_loader = DataLoader(dataset=joint_dataset, batch_size=2, shuffle=True)
for i, batch in enumerate(data_loader, 1):
print(f'배치 {i}:', 'x:', batch[0], '\n y:',batch[1])
>>>
배치 1: x: tensor([[0.7576, 0.2793, 0.4031],
[0.4388, 0.6387, 0.5247]])
y: tensor([0, 3])
배치 2: x: tensor([[0.3971, 0.7544, 0.5695],
[0.7347, 0.0293, 0.7999]])
y: tensor([2, 1])
항목 간 대응이 깨지지 않고 행이 섞여 있는 것을 확인 가능 전체 데이터 셋을 나눈거임
여러 에포크 동안 모델을 훈련할 때 데이터셋을 원하는 에포크 수만큼 섞어서 반복해야 한다.
for epoch in range(2):
print(f'에포크 {epoch+1}')
for i, batch in enumerate(data_loader, 1):
print(f'배치 {i}:', 'x:', batch[0], '\n y:', batch[1])
>>>
에포크 1
배치 1: x: tensor([[0.7347, 0.0293, 0.7999],
[0.4388, 0.6387, 0.5247]])
y: tensor([1, 3])
배치 2: x: tensor([[0.3971, 0.7544, 0.5695],
[0.7576, 0.2793, 0.4031]])
y: tensor([2, 0])
에포크 2
배치 1: x: tensor([[0.4388, 0.6387, 0.5247],
[0.3971, 0.7544, 0.5695]])
y: tensor([3, 2])
배치 2: x: tensor([[0.7347, 0.0293, 0.7999],
[0.7576, 0.2793, 0.4031]])
y: tensor([1, 0])
각 반복마다 다른 원소의 사용
'pytorch' 카테고리의 다른 글
파이토치로 신경망 모델 만들기 (0) | 2024.09.30 |
---|---|
로컬 파일에서 데이터셋 만들기 (0) | 2024.09.30 |
파이토치 입력 파이프라인 구축 (0) | 2024.09.30 |
파이토치 텐서 생성 (2) | 2024.09.30 |
파이토치를 사용한 신경망 훈련(2) - 파이토치로 신경망 모델 만들기 (0) | 2024.07.21 |