일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- Conversation System
- Transformer
- Eliza
- Prompt Tuning with Rules for Text Classification
- GPT-1
- BoostCamp
- multi-head attention
- boj
- pytorch
- ai-tech
- Chatbot
- scaled dot-product attention
- MT-DNN
- KLUE
- NLP
- 취업
- huggingface
- layer normalization
- KLUE-RE
- FSML
- text classification
- bert
- BELU
- Dialogue System
- Transformers
- fine-tuning
- BLEU Score
- Relation Extraction
- 백준
- beam search
Archives
- Today
- Total
dukim's blog
[WK03-Day012][21.08.18.Wed] PyTorch Datasets & DataLoader 본문
Boostcamp AI Tech 2th
[WK03-Day012][21.08.18.Wed] PyTorch Datasets & DataLoader
eliza.dukim 2021. 8. 19. 02:54Intro
- 과제 분량에 숨이 턱턱 막힙니다.
- 그러나 과제 퀄리티가 너무 좋습니다. 그동안 대충 알고 넘어갔던 세밀한 부분들을 짚어주어서 도움이 되었습니다.
- 복습 내용에 모든 걸 담지는 않았습니다. 제가 잘 몰랐던 부분에 대해 알게된 내용만 축약해 기록합니다.
- PyTorch에서의 Datasets & DataLoader 객체에 대한 내용 + 정형 & 비정형 데이터에 대한 Datasets 생성 방법
강의 복습 내용
PyTorch Datasets & Dataloaders
DataLoader
- 안수빈님 블로그-[Pytorch] DataLoader parameter별 용도
- DataLoder는 Generator
- 조각코드: 데이터로더에서 원소 하나를 꺼내 확인
next(iter(my_dataloader))
Dataset, Sampler, Dataloader간의 관계
과제 수행 과정 / 결과물
Custom Dataset
Dataset
- map-style dataset: 일반적인 데이터셋, index로 각 데이터에 접근 가능
- iterable dataset: 실시간으로 생성되는 stream data 등에 적합한 데이터셋(아직은 다뤄 보지 않음)
Sampler
- DataLoader의 index 컨트롤을 위한 객체, 설정시
shuffle=False
- PyTorch에서 제공하는 Sampler의 종류는 많지만, 여기서 다 소개하지는 않음.
- 사용 패턴:
- Train, Val Split을 Sampler로만 할 때(굳이 이렇게 할 필요가 있을까 싶지만 K-fold 시 편할 것 같긴 함)
SubsetRandomSampler
: 전체 데이터셋 중 일부를 랜덤 샘플링# 1. 인덱스가 담긴 리스트 생성 dataset_size = len(my_dataset) dataset_idxs = list(range(dataset_size)) # 2. 인덱스를 셔플 np.random.shuffle(dataset_idxs) # 3. train-val 비율에 따라 분할 val_split_idx = int(np.floor(0.2 * dataset_size)) train_idx, val_idx = dataset_idxs[val_split_idx:], dataset_idxs[:val_split_idx] # 4. SubsetRandomSampler 인스턴스 생성 train_sampler = SubsetRandomSampler(train_idx) val_sampler = SubsetRandomSampler(val_idx) # 5. Split별 Dataset 생성 train_loader = DataLoader(dataset=my_dataset, shuffle=False, batch_size=2, sampler=train_sampler) val_loader = DataLoader(dataset=my_dataset, shuffle=False, batch_size=2, sampler=val_sampler)
WeightedRandomSampler
: 각 '샘플'에 가중치를 부여해 샘플링함.- 상황 1: 불균형 데이터 처리: 각 샘플에
1/(샘플이 속한 class의 총 개수)
로 가중치를 주어 사용(이 곳의 첫번째 답변 참고 - 상황 2: 모델이 잘 맞추지 못하는 샘플에 가중치를 주어 집중적으로 학습하게 함(active learning?)
- 상황 1: 불균형 데이터 처리: 각 샘플에
DistributedSampler
: 분산 처리 모델의 데이터 입력(추후 알아볼 내용)- 참고 : PyTorch [Basics] — Sampling Samplers
- Train, Val Split을 Sampler로만 할 때(굳이 이렇게 할 필요가 있을까 싶지만 K-fold 시 편할 것 같긴 함)
num_workers
- 무작정 높인다고 좋지 않다. CPU에서 GPU로의 데이터 전송에 병목 발생 가능
- 참고: Steve-Lee의 블로그 - [Deep Learning] Bottleneck 현상이란 무엇인가?
collate_fn
- 배치단위 데이터의 변환 시에 활용
- NLP에서는 입력 시퀀스의 길이가 가변적일 때, zero-padding 을 주기 위해서 사용됨
- 데이터는 데이터끼리, 레이블는 레이블끼리 묶어서 출력할 때
- ex) batch size = 3인 경우
- 일반적인 출력: [(x1, y1),(x2, y2),(x3, y3)]
- collate_fn을 지정하여 묶어준 출력: [(x1, x2, x3), (y1, y2, y3)]
torchvision transform
torchvision
은PIL.Image
객체 또는numpy.ndarray
객체로 입력 받는다.- 조각코드: url로부터 PIL 객체로 이미지 받기
from PIL import Image im = Image.open(requests.get(url, stream=True).raw)
transfomrs.Compose
: 여러 transforms을 한 번에 묶어 처리transforms.ToTnsor
와transforms.Normalize
의 순서: PIL Image 객체를ToTensor
로 변환하면 픽셀 값 하나의 범위가 [0, 1]로 바뀐다. 여기서Normalize
를 적용함. 순서를 반대로 할 경우 에러- 기타 Augmentation을 위한 라이브러리
- Albumentations
- Object Detection 분야의 Augmentation엔 imgaug
기타 조각코드
- [정규표현식] 두 칸 이상의 space 한 칸으로 normalize
cleaned_text = re.sub(r'\s+', ' ', input_text)
- 일부 문자를 제거할 때는 공백문자(space)로 치환한 다음에 공백 문자를 normalize 해주자. 그렇게 안 하면 제외한 문자 앞 뒤의 문자가 떨어져있어야하는데 붙어있는 경우가 생긴다.
피어세션
- 모더레이터: 호영
- 발표자: 호영, 요한
- 회의록: 김대웅
발표
호영
- pytorch Image classfication tutorial
- 대회 성능 개선 방안 제안(PPT 참고)
요한
- CV Augmentation 기법
- Back of Tricks for image classification with convolutional neural networks(https://arxiv.org/abs/1812.01187)
- 모션 검출 대회 경험 공유, 실험 관리 예시 제시
- 각각의 모델 별로, 실험 후, 성능 잘 나올 경우 더 파고 들어감
- 다양한 augmentation 방법론 적용하면서 가능성 없는 것들을 제외함
- 제안: 베이스 코드를 만들어 둔 다음, 각자 시도해볼 변경사항들(모델 선택, hyperparameter search)을 적용 해보고, 결과 취합해서 더 나은 방법 선택하자
학습 내용 공유
- 한진
- torch.gather 함수 작동 방식 설명
기타
- 국민취업지원제도, 내일배움카드제도에 대한 공유
학습 회고
- 과제하고 학습 정리 작성하면 하루가 훅간다.
오늘 남은 학습 내용
- 시각화: 3-2 color. 실습, 3-3 facet 강의
- 필수과제: gather, scatter 이해하기, Distributed Sampler에 대한 학습
- generator vs. iterator 둘의 차이에 대한 정리
'Boostcamp AI Tech 2th' 카테고리의 다른 글
Comments