← 보드Dataset과 DataLoader · 7/8
샘플 시험 4번 손으로 풀기 ★★★
이제 문제를 풀 준비가 됐어요. 코드는 이래요.
x = torch.arange(20, dtype=torch.float32).reshape(10, 2)
y = x[:, 0:1] + 2 * x[:, 1:2] + 3
dataset = TensorDataset(x, y)
loader = DataLoader(dataset, batch_size=4,
shuffle=False, drop_last=False)
batch_sizes = []
for batch_x, batch_y in loader:
batch_sizes.append(len(batch_x))
print(len(dataset), len(loader))
print(batch_sizes)
print(batch_y.flatten().tolist())
세 줄의 출력을 차례로 구해요.
- 첫 번째 출력
len(dataset),len(loader)— x가 (10, 2)이니 sample은 10개예요. 배치는 올림(10 ÷ 4) = 3개예요. 출력은10 3이에요. - 두 번째 출력
batch_sizes— 반복할 때마다 그 배치의 sample 수를 리스트에 넣어요. 4, 4, 2이니[4, 4, 2]예요. - 세 번째 출력
batch_y— 반복문이 끝난 뒤의 값이라 마지막 배치예요. 마지막 배치는 8번, 9번 sample이에요. x가 [16, 17]이면 y = 16 + 2×17 + 3 = 53, x가 [18, 19]이면 y = 18 + 2×19 + 3 = 59예요. 출력은[53.0, 59.0]이에요.
이 세 조건을 모두 만족하는 보기는 ③ 10 3 / [4, 4, 2] / [53.0, 59.0]이에요. 오답 보기들이 어떤 실수를 노렸는지도 볼게요.
| 보기 | 내용 | 왜 틀렸나 |
|---|---|---|
| ① | 10 2 / [4, 4] / [29, 35, 41, 47] | drop_last=True일 때의 답이에요. 문제는 False라서 마지막 2개를 버리지 않아요. |
| ② | 10 3 / [4, 4, 4] / [53, 59, 65, 71] | 마지막 배치가 4개로 가득 찼다고 착각했어요. 10개밖에 없는데 65, 71은 없는 sample이에요. |
| ④ | 20 5 / [4, 4, 4, 4, 4] / [53, 59] | sample 수를 숫자 개수(20)로 셌어요. 20 ÷ 4 = 5로 이어진 오답이에요. |
| ⑤ | 10 3 / [4, 4, 2] / [16, 18] | y 대신 x의 첫 칸 값(16, 18)을 적었어요. 정답은 y예요. |
이렇게 고르세요 (풀이 요령)
세 줄 출력 문제는 한 줄씩 지우는 방식으로 풀어요. ① len(dataset)은 sample 수, len(loader)는 배치 수라서 "10 3" 외의 첫 줄을 먼저 지워요. ② 두 번째 줄에서 합이 10이 안 되는 보기를 지워요([4, 4, 4]는 12). ③ 마지막 줄은 마지막 배치의 y를 직접 계산해서 맞는 것을 골라요. 이 문제는 10 3 → [4, 4, 2] → [53.0, 59.0]이에요.
잠깐 확인 — 같은 코드에서 drop_last=True로 바꾸면 세 줄 출력은?
10 2, [4, 4], [29.0, 35.0, 41.0, 47.0]이에요. 배치 수는 내림(2), 마지막 배치는 4~7번 sample이라서 y는 6i+5에 4~7을 넣은 값이에요.
다음 카드 → 이 장 3줄 요약
자료: 7주차 · Week05_Dataset_DataLoader_Train_Validation(part1) · 7주차 녹취(빅데이터07)