본문 바로가기
Theory/Pytorch

[파이토치 트랜스포머 #4] 3장 파이토치 기초 - 3) 데이터세트와 데이터로더

by 남디윤 2024. 3. 6.

 

 

데이터세트와 데이터로더

  • 데이터세트는 데이터의 집합을 의미하며, 입력값X와 결과값Y에 대한 정보를 제공하거나 일련의 데이터 묶음을 제공함

 

데이터세트

  • 학습에 필요한 데이터 샘플을 정제하고 정답을 저장하는 기능을 제공
  • 모델 학습을 위해 임의의 데이터세트를 구성할 때 파이토치에서 지원하는 데이터세트 클래스를 상속받아 사용
  • 선형 변환 함수나 오차 함수처럼 클래스 형태로 제공
  • 기본형
    • 초기화 메서드 __init__ :
      • 입력된 데이터의 전처리 과정을 수행하는 메서드
      • 새로운 인스턴스가 생성될 때 학습에 사용될 데이터를 선언, 학습에 필요한 형태로 변형하는 과정을 진행
    • 호출 메서드 __getitem__ :
      • 학습을 진행할 때 사용되는 하나의 행을 불러오는 과정
      • 입력된 색인 index에 해당하는 데이터 샘플을 불러오고 반환
    • 길이 반환 메서드 __len__ :
      • 학습에 사용된 전체 데이터세트의 개수를 반환
      • 몇 개의 데이터로 학습이 진행되는지 확인 가능

 

데이터로더

  • 데이터세트에 저장된 데이터를 어떠한 방식으로 불러와 활용할지 정의
  • 파이토치는 데이터세트와 데이터로더를 통해 학습에 필요한 데이터 구조 생성
  • 일반적으로 데이터세트를 재정의해 가장 많이 사용, 데이터로더에서는 주로 배치 크기를 조절해가며 현재 학습 환경에 맞는 구조로 할당
  • 배치 크기 batch_size, 데이터 순서 변경 shuffle, 데이터 로드 프로세스 수 num_workers 등의 기능 제공
  • 배치 크기
    • 학습에 사용되는 데이터의 개수가 매우 많아 한 번의 에폭에서 모든 데이터를 메모리에 올릴 수 없을 때 데이터를 나누는 역할
    • 전체 데이터세트에서 배치 크기만큼 데이터 샘플을 나누고 모든 배치를 대상으로 학습을 완료하면 한 번의 에폭이 완료되는 구조
    • ex. 1000개의 데이터 샘플이 데이터 세트의 전체 길이 → 배치 크기 100으로 할당 → 10번의 배치가 완료될 때 1번의 에폭 진행
  • 데이터 순서 변경
    • 모델이 데이터 간의 관계가 아닌, 데이터의 순서로 학습되는 것을 방지
    • 행의 순서를 변경하는 개념
  • 데이터 로드 프로세스 수
    • 데이터를 불러올 때 사용할 프로세스의 개수
    • 학습을 제외한 코드에서는 데이터를 불러오는 데 시간이 가장 오래 소요 → 이를 최소화하고자 데이터 로드에 필요한 프로세스의 수 증가

 

다중 선형 회귀

  • 데이터세트와 데이터로더를 활용해 지도학습 중 하나인 다중 선형 회귀 구현 예제
  • 기본 구조 선언
    import torch
    from torch import nn
    from torch import optim
    from torch.utils.data import TensorDataset, DataLoader 
    
    
    train_x = torch.FloatTensor([
        [1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7]
    ])
    train_y = torch.FloatTensor([
        [0.1, 1.5], [1, 2.8], [1.9, 4.1], [2.8, 5.4], [3.7, 6.7], [4.6, 8]
    ])​
     
    •  torch.utils.data 모듈: 데이터세트와 데이터로더 포함
    • 데이터세트와 데이터로더를 사용하기 위해 TensorDataset, DataLoader 포함
      • Tensor Dataset는 기본 데이터세트 클래스를 상속받아 재정의된 클래스

 

  • 데이터세트와 데이터로더 적용
    train_dataset = TensorDataset(train_x, train_y)
    train_dataloader = DataLoader(train_dataset, batch_size=2, shuffle=True, drop_last=True)​
    • Tensor Dataset를 활용해 훈련용 데이터세트 train_dataset를 생성
    • train_dataset 인스턴스 생성 후 DataLoader로 훈련용 데이터 세트를 불러옴
      • 배치 크기 batch_size를 2로 선언: 한 번의 배치마다 두 개의 데이터 샘플과 정답을 가지고옴
      • 데이터 순서 변경 shuffle 를 참값 : 데이터의 순서를 무작위로 변경
      • 배치 제거 drop_last를 참값 : 배치 크기에 맞지 않는 배치를 제거 (불안전한 배치 사용 여부 결정)
  • 이하 생략