시험공부빅데이터분석
← 보드Dataset과 DataLoader · 4/8

DataLoader — sample을 모아서 배치로 만들어 주는 도구 ★★★

DataLoader는 Dataset에서 sample을 꺼내 지정한 크기의 배치로 묶어서 하나씩 건네주는 도구예요. 교수님이 먼저 for 문으로 직접 sample을 모아 torch.stack으로 쌓아 보여 준 뒤, "이 일을 DataLoader가 대신 해 주니 걱정할 필요 없다"고 했어요.

비유 — 급식 배식

학생(sample)이 줄을 서 있고, 배식 담당(DataLoader)이 4명씩 묶어서 식당으로 들여보내요. 마지막에 2명이 남으면 그 2명이 마지막 묶음이 되고요. 줄을 매번 새로 섞을지(shuffle)도 담당이 정해요.

옵션역할기본값
batch_size한 배치에 넣을 sample 수1
shuffle순회할 때마다 sample 순서를 섞을지False
drop_last배치 크기보다 모자란 마지막 배치를 버릴지False
from torch.utils.data import TensorDataset, DataLoader loader = DataLoader( dataset, batch_size=4, shuffle=False, drop_last=False ) print("dataset 길이:", len(dataset), "loader 길이:", len(loader)) for i, (batch_x, batch_y) in enumerate(loader): print(i, tuple(batch_x.shape), tuple(batch_y.shape), batch_y.flatten().tolist())
dataset 길이: 10 loader 길이: 3 0 (4, 2) (4, 1) [5.0, 11.0, 17.0, 23.0] 1 (4, 2) (4, 1) [29.0, 35.0, 41.0, 47.0] 2 (2, 2) (2, 1) [53.0, 59.0]
코드 줄무슨 뜻
DataLoader(dataset, batch_size=4, ...)dataset에서 4개씩 묶어서 꺼내 주는 도구를 만들어요.
len(dataset)sample 수 = 10
len(loader)배치 수 = 3 (4개, 4개, 2개)
for batch_x, batch_y in loader:배치를 하나씩 꺼내요. 한 번 꺼낼 때마다 입력 묶음과 정답 묶음이 짝으로 나와요.
enumerate(loader)번호 i를 0, 1, 2로 같이 붙여 줘요.
tuple(batch_x.shape)배치의 입력 크기예요. (4, 2)는 sample 4개, 특성 2개예요.
batch_y.flatten().tolist()(4, 1) 모양의 정답을 일렬로 펴서 파이썬 리스트로 바꿔요.

마지막 배치의 x는 [[16, 17], [18, 19]]이에요. 이 for 문을 끝까지 한 번 돌면 전체 데이터를 한 바퀴 돈 것이라서 1 epoch이에요.

교수님이 던진 질문도 정리해 볼게요. "dataset[0]과 next(iter(loader))는 무엇이 다른가요?"

구분무엇이 나오나x, y 크기
dataset[0]sample 하나(2,) , (1,)
next(iter(loader))첫 번째 배치(sample 4개 묶음)(4, 2) , (4, 1)

배치의 크기는 맨 앞에 배치 크기가 붙는 모양이에요. sample 하나의 (2,)가 4개 쌓이면 (4, 2)가 돼요. 이것이 5장에서 모델에 넣던 "배치 4개, 특성 2개" 입력이에요.

이렇게 고르세요 (풀이 요령)

len(dataset)은 sample 수, len(loader)는 배치 수예요. 둘을 섞어 쓴 보기(예 "10 10")는 오답이에요. batch_size=4이면 한 배치 x의 크기는 (4, 특성 수)이고 마지막 배치만 작을 수 있어요.

잠깐 확인 — DataLoader를 for 문으로 한 번 끝까지 돌면 무엇이 한 번 끝난 건가요?

1 epoch이에요. 모든 sample을 한 번씩 사용했으니까요. 이때 for 문이 도는 횟수는 배치 수(len(loader))와 같아요.

다음 카드 → 배치 개수와 마지막 배치 크기 계산 ★★★

자료: 7주차 · Week05_Dataset_DataLoader_Train_Validation(part1) · 7주차 녹취(빅데이터07)