Pytorch Dataloader 알아보기 (+ various length 처리하기)

  • 예전에 파이토치에서 코딩을 할 때는, dataloader 없이 그냥 로우하게 코딩했다.
    • txt 파일이라하면, 그냥 txt파일 읽고, readlines으로 리스트 같은 곳에 저장해서 for문에서 하나씩 읽어서? 하는 느낌으로...
    • 물론 batch 및 padding은 직접 짜주는 식으로 했다.
  • 남의 코드 없이 밑바닥 부터 짜는 경우가 있어서 큰 상관은 없었으나..
  • 보통 오픈된 코드를 참고하고자 살펴보면 Dataloader을 쓰더라!
    • 이것은 위와 같은 귀찮은 작업들을 class 함수로 짜주면 간단히 해결할 수 있다는 것이다.
    • 이렇게 짜줄 때, sequence와 같은 경우 데이터 길이가 당연히 달라질 수 있는데 이것을 collate_fn을 이용해서 padding 처리할 수 있는 개념이 있다.
    • 위의 설명은 https://hulk89.github.io/pytorch/2019/09/30/pytorch_dataset/에서 빠르게 익힐 수 있다.
  • 부연설명하자면
    • 아래와 같은 데이터세트가 있다고 하자.
      • 데이터세트: 오픈된 한국 챗봇 데이터세트
    • 아래와 같이 class을 짤 수 있다.

      • 여기서 class을 선언할 때 __init__은 뭐 초기함수 개념이고
      • __len__은 데이터 길이를 출력
      • __getitem__이 핵심 함수로 데이터를 읽어 들이는 부분이다.
      • 참고로 여기서 tokenizer은 BPE이다.
    • 이것을 다음과 같이 일반적으로 사용이 가능하다.
      • 근데 이렇게 쓰면, 데이터가 다양한 경우 처리가 안된다.
      • 이를 찾아보면 collate_fn을 사용하라고 검색이 된다.
      • 참고로 여기서 shuffle을 하는 방법으로 sampler가 있고 shuffle=True가 있는데 기본적으로 sampler은 데이터로드를 할 수 있는 여러 방법을 제시하는 것이다.
      • 단순히 sample에 randomsampler을 쓰는것과 shuffle=True는 무슨 차이가 있는 거지?
    • 따라서 various은 다음과 같이 처리가 가능하다. (위의 reference링크를 참고하여 짜보았다.)

댓글