이미지 분류 데이터는 보통:
X = 이미지 데이터
y = 정답(Label)
형태로 구성된다.
예:
X = torch.rand(100, 1, 28, 28)
y = torch.randint(0, 10, (100,))
torch.rand(100, 1, 28, 28)이미지 데이터 100장을 만든다.
Shape 의미:
(100, 1, 28, 28)
↑ ↑ ↑ ↑
샘플 채널 높이 너비
즉:
이미지 한 장의 Shape:
(1, 28, 28)
채널은 이미지 한 장을 구성하는 정보 층의 수이다.
흑백:
1 Channel
RGB 컬러:
3 Channels
R
G
B
따라서 RGB 이미지 100장이면:
(100, 3, 28, 28)
채널이 3개라고 Label도 3배가 되는 게 아니다.
R ┐
G ├→ 이미지 1장 → Label 1개
B ┘
예:
이미지 100장
→ Label 100개
채널 수가 1이든 3이든 샘플 하나당 정답 하나인 분류 문제라면 Label 개수는 그대로이다.
torch.randint(0, 10, (100,))0~9 사이 정수로 정답 100개를 만든다.
예:
[7, 2, 1, 9, 0, ...]
Shape:
(100,)
즉:
X[0] ↔ y[0]
X[1] ↔ y[1]
X[2] ↔ y[2]
...
이미지와 Label이 같은 인덱스로 한 쌍이 된다.
전체 데이터를 한 번에 모델에 넣지 않고 작은 묶음으로 나눠 학습하는 것.
예:
전체 데이터 = 100개
batch_size = 2
이면:
배치 1 → 데이터 2개
배치 2 → 데이터 2개
...
배치 50 → 데이터 2개
batch_size = 2 의미:
배치가 2개라는 뜻이 아니라, 배치 하나에 데이터 2개가 들어간다는 뜻
예:
원본 데이터 Shape
(100, 1, 28, 28)
한 Batch Shape
(2, 1, 28, 28)
기본적으로:
배치 개수 × 배치 사이즈
= 전체 샘플 수
예:
100개 데이터
batch_size = 10
→ 10개 Batch
단, 딱 나누어지지 않으면 마지막 Batch는 작을 수 있다.
예:
103개
batch_size = 10
→ 10개씩 10 Batch
→ 마지막 3개
정확한 표현:
모든 Batch에 들어있는 샘플 수의 합 = 전체 샘플 수
PyTorch DataLoader에서 보통 설정한다.
DataLoader(
dataset,
batch_size=4,
shuffle=True
)
shuffle=True데이터 순서를 랜덤으로 섞은 뒤 Batch를 만든다.
원래
0 1 2 3 4 5 6 7
섞기
5 1 7 0 3 6 2 4
Batch 1
5 1 7 0
Batch 2
3 6 2 4
shuffle=False순서대로 Batch를 만든다.
Batch 1 → 0 1 2 3
Batch 2 → 4 5 6 7
어떤 샘플을 어떤 순서로 선택할지를 결정하는 기능.
대표적:
RandomSampler
→ 랜덤 선택
SequentialSampler
→ 순서대로 선택
WeightedRandomSampler
→ 특정 데이터가 더 자주 선택되도록 가중치 부여
클래스 불균형이 있을 때 WeightedRandomSampler 등을 사용할 수 있다.
Dataset
= 데이터 + Label
이미지 Shape
= [샘플 수, 채널, 높이, 너비]
(100,1,28,28)
= 흑백 28×28 이미지 100장
Label Shape
= (100,)
= 이미지 100장의 정답 100개
Batch
= 데이터를 나눈 작은 묶음
Batch Size
= 한 Batch 안의 데이터 개수
shuffle=True
= 데이터를 섞어서 Batch 구성
Sampler
= 어떤 데이터를 어떤 순서로 뽑을지 결정