[AITech][Image Classification] 20220222 - DataLoader

1 minute read


본 포스팅은 번개장터의 ‘김태진’ 강사 님의 강의를 바탕으로 제작되었습니다.

학습 내용

이번 포스팅에서는 DataLoader의 역할인 Data Feeding에 대해 알아보겠습니다.

Data Feeding

모델이 원하는 형태로 적절히 Dataset을 생성하고 나면, 이를 모델에게 전달해주는 과정이 필요합니다. 이를 Data Feeding이라고 하고 DataLoader의 역할입니다.

여기서 중요한 것은, DataLoader가 데이터를 주는데 걸리는 시간과 Model이 데이터를 받는데 걸리는 시간 사이에 균형을 맞춰줘야 한다는 것입니다. 아래와 같은 경우들은 균형을 제대로 맞추지 못 한 경우에 해당합니다.

image-20220222114409832

이는 Dataset을 만드는 과정에서도 적용될 수 있습니다. 아래를 보면, 어떤 연산을 어떤 순서로 사용했느냐에 따라 데이터를 가져오는 데 걸리는 시간이 매우 달라집니다.

image-20220222114557947


torch.utils.data

Dataset

앞선 포스팅에서 말했듯이, Dataset의 역할은 Vanilla Data를 Dataset 형태로 변환하는 것입니다.

image-20220222114652622

이런 데이터셋을 만들 때는 torch.utils.data의 Dataset 클래스를 상속받아 나만의 custom dataset 클래스를 정의합니다. 그리고 다음의 3가지 magic function을 구현해야 합니다.

  • __init__()
  • __getitem__(index)
  • __len__()

image-20220222114741774

DataLoader

DataLoader의 역할은 만들어진 Dataset을 모델에게 적절히 전달해주는 것입니다. 이는 직접적인 데이터와는 아무 상관이 없습니다.

image-20220222115202219


전체적으로 [Image Classification] 과정에서는 간단하고 핵심적인 내용만 전달하기 때문에, Dataset과 DataLoader에 대해 더 자세히 알고싶으신 분들은 아래 포스팅을 참고하는 것을 추천드립니다.

그리고 torch.utils.data의 PyTorch Documentation도 참고하는 것을 추천드립니다.


마지막으로, Dataset과 DataLoader는 하는 일이 엄연히 다르다는 것을 꼭 명심합시다. 그리고 Custom Dataset은 Dataset을 상속하여 직접 클래스로 정의하고, Custom DataLoader는 DataLoader 클래스에 인자만 다르게 전달하여 인스턴스를 생성한다는 것도 기억해둡시다.

image-20220222115905869



참고 자료


Leave a comment