시험공부빅데이터분석
← 보드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())

세 줄의 출력을 차례로 구해요.

  1. 첫 번째 출력 len(dataset), len(loader) — x가 (10, 2)이니 sample은 10개예요. 배치는 올림(10 ÷ 4) = 3개예요. 출력은 10 3이에요.
  2. 두 번째 출력 batch_sizes — 반복할 때마다 그 배치의 sample 수를 리스트에 넣어요. 4, 4, 2이니 [4, 4, 2]예요.
  3. 세 번째 출력 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)