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

TensorDataset — 이미 만들어진 Dataset ★★★

TensorDataset은 입력 Tensor와 정답 Tensor를 넘기면 위의 일을 대신해 주는 PyTorch 기본 도구예요. Dataset을 상속해서 만들어져 있어요. 넘기는 Tensor들은 첫 번째 차원(sample 수)이 같아야 해요.

교수님이 시험 샘플과 같은 데이터로 설명했어요. x는 0부터 19까지를 (10, 2) 모양으로 만들고, y는 x의 첫 칸 + 2 × x의 둘째 칸 + 3으로 만들어요.

toy_x = torch.arange(20, dtype=torch.float32).reshape(10, 2) toy_y = toy_x[:, 0:1] * 1 + toy_x[:, 1:2] * 2 + 3 dataset = TensorDataset(toy_x, toy_y) print("sample 수:", len(dataset)) x0, y0 = dataset[0] print("첫 sample:", x0, y0) print("sample shape:", x0.shape, y0.shape)
sample 수: 10 첫 sample: tensor([0., 1.]) tensor([5.]) sample shape: torch.Size([2]) torch.Size([1])
코드 줄무슨 뜻
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예요.

i0123456789
x[0,1][2,3][4,5][6,7][8,9][10,11][12,13][14,15][16,17][18,19]
y5111723293541475359
외우기 팁

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의 모양이에요.

다음 카드 → DataLoader — sample을 모아서 배치로 만들어 주는 도구 ★★★

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