일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Python
- nlp
- FineGrained
- FGVC
- cs
- Front
- Vision
- 3d
- CV
- nerf
- computervision
- Meta Learning
- Torch
- SSL
- PRML
- 머신러닝
- GAN
- classification
- 딥러닝
- 알고리즘
- math
- clean code
- dl
- algorithm
- pytorch
- 자료구조
- ML
- Depth estimation
- web
- REACT
- Today
- Total
KalelPark's LAB
[ Pytorch ] Data Sampler & Sequence Bucketing? 본문
Data Sampler는 주어진 Data Pool과 batchsize에서 어떻게 batch를 형성할지 결정해주며,
Dataset의 순서를 결정하는 역할을 하기도 합니다. DataLoader가 초기화될 때, 데이터셋의 샘플들의 Sequence Order를 작성한다.
만들어진 Sequence를 통하여, 데이터셋에서 데이터들이 주어진 Batchsize만큼 batch의 형태로 나오게 됩니다.
Sampler에는 여러가지가 존재합니다.
- Random Sampler : 랜덤, replacement 여부 선택 가능, 개수 선택 가능
- SubsetRandom Sampler : 랜덤 리스트, 위와 두 조건 불가능
- Sequential Sampler : 항상 같은 순서
- Custom Sampler (Weight) : 가중치에 따른 확률
- DistributedSampler (Weight) : 분산처리
위의 내용을 공부한 이유는, Self-Supervised Learning을 위함이다.
Self Supervised Learning에서의 Unsupervised의 경우에는 Positive Sampling과 NegativeSampling을 해야하는데,
Positive Sampling과 NegativeSampling을 하는 방법에 대해서 명확히 몰랐었다. transform으로 간단할 수 있음을 알 수 있다.
# Transform
train_transform = transforms.Compose([
transforms.Resize((250,250)),
transforms.RandomResizedCrop(224),
transforms.RandomApply([
transforms.ColorJitter(0.5, 0.5, 0.5)
], p=0.8),
transforms.RandomGrayscale(p=0.2),
transforms.ToTensor(),
transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))
])
# Transform 설정
class Split:
def __init__(self, base_transform):
self.base_transform = base_transform
def __call__(self, x):
q = self.base_transform(x)
k = self.base_transform(x)
return [q, k]
# transform 설정
train_ds = datasets.STL10(path2data, split='train',
download=True, transform=Split(train_transform))
train_dl = DataLoader(train_ds, batch_size=256, shuffle=True)
참고
https://deep-learning-study.tistory.com/744
https://subinium.github.io/pytorch-dataloader/
https://www.kaggle.com/code/shahules/guide-pytorch-data-samplers-sequence-bucketing/notebook
'Python > Pytorch' 카테고리의 다른 글
[Pytorch] torch.gather 코드로 간략하게 이해하기 (0) | 2023.03.16 |
---|---|
[ Pytorch ] Tensor를 나누는 방법들, Split, Chunk란? (0) | 2023.01.25 |
[ Pytorch ] meshgrid, cumsum란? (0) | 2023.01.23 |
[ Pytorch ] Logsumexp 활용하기 (0) | 2023.01.05 |
[ Pytorch ] Chunk 활용하기 (0) | 2023.01.03 |