데이터세트와 데이터로더
- 데이터세트는 데이터의 집합을 의미하며, 입력값X와 결과값Y에 대한 정보를 제공하거나 일련의 데이터 묶음을 제공함
데이터세트
- 학습에 필요한 데이터 샘플을 정제하고 정답을 저장하는 기능을 제공
- 모델 학습을 위해 임의의 데이터세트를 구성할 때 파이토치에서 지원하는 데이터세트 클래스를 상속받아 사용
- 선형 변환 함수나 오차 함수처럼 클래스 형태로 제공
- 기본형
- 초기화 메서드 __init__ :
- 입력된 데이터의 전처리 과정을 수행하는 메서드
- 새로운 인스턴스가 생성될 때 학습에 사용될 데이터를 선언, 학습에 필요한 형태로 변형하는 과정을 진행
- 호출 메서드 __getitem__ :
- 학습을 진행할 때 사용되는 하나의 행을 불러오는 과정
- 입력된 색인 index에 해당하는 데이터 샘플을 불러오고 반환
- 길이 반환 메서드 __len__ :
- 학습에 사용된 전체 데이터세트의 개수를 반환
- 몇 개의 데이터로 학습이 진행되는지 확인 가능
- 초기화 메서드 __init__ :
데이터로더
- 데이터세트에 저장된 데이터를 어떠한 방식으로 불러와 활용할지 정의
- 파이토치는 데이터세트와 데이터로더를 통해 학습에 필요한 데이터 구조 생성
- 일반적으로 데이터세트를 재정의해 가장 많이 사용, 데이터로더에서는 주로 배치 크기를 조절해가며 현재 학습 환경에 맞는 구조로 할당
- 배치 크기 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를 참값 : 배치 크기에 맞지 않는 배치를 제거 (불안전한 배치 사용 여부 결정)
- 이하 생략
'Theory > Pytorch' 카테고리의 다른 글
[파이토치 트랜스포머 #6] 3장 파이토치 기초 - 5) 활성화 함수 (1) | 2024.03.17 |
---|---|
[파이토치 트랜스포머 #5] 3장 파이토치 기초 - 4) 모델/데이터세트 분리, 모델 저장 및 불러오기 (0) | 2024.03.06 |
[파이토치 트랜스포머 #3] 3장 파이토치 기초 - 2) 가설, 손실함수, 최적화 (2) | 2024.03.04 |
[파이토치 트랜스포머 #2] 3장 파이토치 기초 - 1) 텐서 (1) | 2024.02.24 |
[파이토치 트랜스포머 #1] 1장 인공지능과 방법론 (1) | 2024.02.24 |