4 minute read

Data Feeding

모델 개발 전 데이터를 다루는 방법과 팁에 대하여 알아보자.

  • Feed : 먹이를 주다, 모델에 먹이(Data)를 주다?
  • 대상의 상태를 고려해서 적정한 양을 준다.

EDA (Exploratory Data Analysis)

  • 데이터를 처리하기 전 데이터를 탐색하는 단계
  • 탐색적 데이터 분석
  • 데이터를 이해하기 위한 노력
  • 데이터를 이해함으로써 앞으로의 모델링, 훈련 등에 큰 밑거름이 된다

EDA의 목적

  • 데이터를 이해하기 위한 여러가지 방법 중에 궁금한 것을 알아보는 과정이다.(무엇이든 간에)
  • 데이터를 처음 봤을때 의문점등 다양한 질문들에 대한 답을 찾아 나가는것.
  • 도구는 도구일 뿐 위의 목적을 잊어버리지 말자.

Data Set

데이터 셋을 어떻게 활용하면 훈련에 잘 적용 할 수 있을까?

  • 주어진 데이터를 모델이 좋아하는 데이터 셋으로 만들자. -> 이해하기 어려운 데이터를 이해하기 쉬운 형태로 바꾸어 주자.

Pre-processing

학습 전 데이터를 좀 더 이해하기쉽고, 훈련에 적합한 데이터로 만들기 위한 과정

  • ex) null값을 평균치로 적용하는것, 이상치를 제외하고 훈련등등

Resize

계산의 효율성을 위해 적절한 사이즈로 변경

Generalization 일반화

Bias & Variance

Bias and Variance

  • 학습이 너무 안 됐거나, 학습이 너무 됐거나를 확인 할 수 있다.

Train / Validation

  • 훈련 셋 중 일정 부분을 따로 분리, 검증 셋으로 활용
  • 학습을 했을 때 검증을 할 수 있는 방법이 없음 -> 학습이 되지않은 데이터로 검증을 해봐야댐 -> 검증 셋 필요 -> 학습전 학습셋 중 학습셋과 검증셋을 나눠 뽑아 사용한다.

Data Augmentation

Data Augmentation

  • 위의 사진에서 맨왼쪽이 원본이고, 어둡게하고, 비오는 환경을 만들었다.
  • 주어진 데이터가 가질 수 있는 경우, 상태의 다양성
  • 원본 데이터를 조작함으로써 데이터의 정보량을 늘려 다양한 데이터를 학습한 효과를 누릴 수 있다.
  • torchvision.transforms을 사용하여 손쉽게 augmentation적용가능하다.
  • torchvision.transforms
  • transforms이외에도 Albumentations을 이용하여 다양하고 빠르게 적용가능.
  • Albumentations

Data Generation

Generator 와 Model의 관계

Data Augmentation

  • 위 그림에서 첫번째 그림은 Generator가 초당 10개의 배치를 생산하고, Model이 초당 20배치를 처리하게 되면 결국엔 최대 초당 10개의 배치만 처리가능하다.
  • 아래 그림에서 첫번째 그림은 초당 30배치의 생산, 초당 20배치의 처리량 -> 최대 20배치를 처리할 수 있다.
  • 이 내용을 통해서 모델의 처리량 만큼 데이터 generator의 생산량을 고려해야한다.

torch.utils.data

파이토치를 통해 Dataset과 DataLoader을 사용해보고 어떻게 만들어나가는지, 어떻게 튜닝 해야하는지에 대하여 알아보자.

Datasets

Data Augmentation

  • torch.utils.data의 Dataset 라이브러리를 상속한다.(Dataset 클래스의 기능들을 사용하기 위해)
  • __init__ -> 클래스가 처음 선언 되었을 때 호출
  • __getitem__ -> 데이터 중 index 위치의 아이템을 리턴
  • __len__ -> MyDatast의 아이템의 전체 길이

DataLoader

  • Dataset을 효율적으로 사용할 수 있도록 관련 기능을 추가한다.
  • Batch 사이즈 설정, Channel, Shuffle할지 안할지, 배치사이즈에 맞지 않으면 버릴지 않버릴지(drop_last)등을 통해 많은 기능들이 있으며 데이터를 모델에 올릴때 적절하게 커스텀 가능하다.
  • collate_fn : 배치마다 함수를 다르게 적용하고싶다, 취합해서 적용하고 싶다.

Dataset VS DataLoader

  • Dataset -> 데이터를 원하는 형태로 출력해준다.
  • DataLoader -> Dataset을 조금 더 효율적으로 사용하기 위한 클래스.
  • 데이터 로더를 하나 잘 만들어 놓으면 다른 데이터 셋에도 적용할 수 있다.(데이터 로더는 한개 셋은 새롭게)

Comments