TensorDataset — 이미 만들어진 Dataset ★★★
TensorDataset은 입력 Tensor와 정답 Tensor를 넘기면 위의 일을 대신해 주는 PyTorch 기본 도구예요. Dataset을 상속해서 만들어져 있어요. 넘기는 Tensor들은 첫 번째 차원(sample 수)이 같아야 해요.
교수님이 시험 샘플과 같은 데이터로 설명했어요. x는 0부터 19까지를 (10, 2) 모양으로 만들고, y는 x의 첫 칸 + 2 × x의 둘째 칸 + 3으로 만들어요.
| 코드 줄 | 무슨 뜻 |
|---|---|
torch.arange(20).reshape(10, 2) | 0~19를 10줄 × 2칸으로 놓아요. [[0, 1], [2, 3], ..., [18, 19]]. sample 10개, 특성 2개예요. |
toy_x[:, 0:1] | 모든 줄의 첫 번째 칸을 (10, 1) 모양으로 꺼내요. |
toy_y = 첫째 + 2 × 둘째 + 3 | 정답 y. 크기는 (10, 1)이에요. |
TensorDataset(toy_x, toy_y) | x와 y를 같은 번호끼리 짝지어 Dataset으로 만들어요. |
len(dataset) | 10이에요. 숫자 20개가 아니라 줄(sample) 수예요. |
dataset[0] | 첫 sample. x는 [0., 1.](크기 (2,)), y는 [5.](크기 (1,))예요. 0 + 2×1 + 3 = 5. |
y값을 손으로 한 번에 구하는 요령이 있어요. i번째 sample(0부터 센)의 x는 [2i, 2i+1]이니까 y = 2i + 2(2i+1) + 3 = 6i + 5예요.
| i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| x | [0,1] | [2,3] | [4,5] | [6,7] | [8,9] | [10,11] | [12,13] | [14,15] | [16,17] | [18,19] |
| y | 5 | 11 | 17 | 23 | 29 | 35 | 41 | 47 | 53 | 59 |
len(dataset)은 sample 수이고 Tensor 안의 숫자 전체 개수가 아니에요. x가 (10, 2)이면 숫자는 20개지만 sample은 10개라서 답은 10이에요. 교수님이 dataset[0]이 (입력, 정답) 한 쌍이라는 점을 강조했어요.
x = torch.arange(20).reshape(10, 2)를 TensorDataset에 넣으면 len(dataset)은 10이에요. "20"이 들어 있는 보기는 오답이에요. sample 하나의 x 크기는 (2,), y 크기는 (1,)이에요.
잠깐 확인 — x가 (100, 5) 크기이면 TensorDataset의 len은? sample 하나의 x 크기는?
len은 100이고, sample 하나의 x 크기는 (5,)예요. 첫 번째 숫자가 sample 수이고 나머지가 한 sample의 모양이에요.
자료: 7주차 · Week05_Dataset_DataLoader_Train_Validation(part1) · 7주차 녹취(빅데이터07)