본문 바로가기
  • 기술을 이야기하지만 사람을 생각합니다.
20. 인공지능과 딥러닝

[PyTorch로 시작하는 딥러닝 기초] 04-2. Loading Data

by WE DONE IT. 2020. 2. 2.

edwith의 <파이토치로 시작하는 딥러닝 기초> 'Lab-o4-2 Loading Data' 강의를 정리하였습니다.

 

[LECTURE] Lab-04-2 Loading Data : edwith

학습목표 미니배치 경사하강법(Minibatch Gradient descent)를 배우고 Dataset & DataLoader 사용법에 대해 알아본다. 핵심키워드 다항 선형 회귀(M... - tkddyd

www.edwith.org


Lab-04-2 Loading Data

Minibatch Gradient Descent

수 많은 데이터를 한 번에 학습하면 시간이 오래 걸리며, 컴퓨터에 무리가 간다. 이 문제를 해결하기 위해, 딥러닝에서는 전체 데이터를 'minibatch'로 양을 균일하게 나눈 뒤, minibatch를 하나씩 학습한다.

 

Minibatch Gradient Descent Effects

배치 전체를 학습했을 때와 미니배치를 했을 때 각각의 cost 그래프

  • 업데이트를 빠르게 할 수 있음
  • 전체 데이터를 쓰지 않기 때문에, 잘못된 방향으로 업데이트 할 수 있음.
    cost가 매끄럽게 줄어들지 않고, 거칠게 줄어들게 됨.

PyTorch DataSet

from torch.utils.data import Dataset

class CustomDataset(Dataset):
	def __init__(self):
    	self.x_data = [[73, 80, 75],
        		[93, 99, 93]]
        self.y_data = [[152], [185]]
        
	def __len__(self):
    	return len(self.x_data)

	def __getitem__(self, idx):
    	x = torch.FloatTensor(self.x_data[idx])
        y = torch.FloatTensor(self.y_data[idx])
        
        return x, y

dataset = CustomDataset()

 

  • torch.utils.data.Dataset 상속
  • __len__() : 데이터셋의 총 데이터 수
  • __getitem__() : 어떤 인덱스 idx를 받았을 때, 이에 상응하는 입출력 데이터 변환 

PyTorch DataLoader

from terch.utils.data import Dataloader

dataloader = Dataloader(
	dataset,
    batch_size = 2,
    shuffle = True,
)
  • torch.utils.data.DataLoader 사용
  • batch_size = 2 
    • 각 minibatch의 크기 (한 번의 배치 안에 있는 샘플 사이즈)
    • 통상적으로 2의 제곱수로 설정함 (예: 16, 32, 64...)
  • shuffle = True
    • Epoch 마다 데이터셋을 섞어, 데이터가 학습되는 순서를 바꿈
    • 학습할 때 항상 True로 설정하는 것을 권장함
nb_epochs = 20
for epoch in range(nb_epochs +1): 
	for batch_idx, smaples in enumerate(dataloader):
    x_train, y_train = samples
    
    #H(x) 계산
    prediction = model(x_train)
    
    # cost 계산
    cost = F.mse_loss(prediction, y_train)
    
    # cost로 H(x) 개선
    optimizer.zero_grad()
    cost.backward()
    optimizer.step()
    
    print('Epoch {:4d}/{} Batch {}/{} Cost : {:.6f}'.format(
    		epoch, nb_epochs, batch_idx+1, len(dataloader),
            cost.item()
    ))
  • enumerate(dataloader)
    • minibatch 인덱스와 데이터를 받음
  • len(dataloader)
    • 한 epoch 당 minibatch 개수

 


참고자료

PyTorch Data Loading and Processing tutorial

 

Writing Custom Datasets, DataLoaders and Transforms — PyTorch Tutorials 1.4.0 documentation

Note Click here to download the full example code Writing Custom Datasets, DataLoaders and Transforms Author: Sasank Chilamkurthy A lot of effort in solving any machine learning problem goes in to preparing the data. PyTorch provides many tools to make dat

pytorch.org

 

댓글