← 보드Tensor · 2/11
shape 읽기와 확인 3종 — shape, dtype, device ★★★
Tensor를 다룰 때 항상 같이 확인해야 하는 세 가지가 있어요. 교수님이 "에러가 나면 shape, dtype, device부터 보라"고 반복해서 말했어요.
x = torch.tensor([[10, 20, 30],
[40, 50, 60]])
print(x.shape)
print(x.ndim)
print(x.numel())
print(x.dtype)
print(x.device)
torch.Size([2, 3])
2
6
torch.int64
cpu
| 코드 줄 | 무슨 뜻 |
|---|---|
x.shape | 모양. 2행 3열 → [2, 3] |
x.ndim | 차원의 수. shape에 적힌 숫자가 2개이니 2 |
x.numel() | 전체 원소 개수. shape 숫자를 곱해요. 2×3 = 6 |
x.dtype | 정수만 적었으니 int64 |
x.device | 기본은 CPU에 만들어져요(3장) |
shape 읽는 요령은 두 가지예요. ① shape 안 숫자가 몇 개인지가 차원 수예요. ② 숫자를 모두 곱하면 전체 원소 수예요.
헷갈리는 점
(3,)의 3은 "3차원"이 아니라 "원소가 3개"라는 뜻이에요. 숫자가 하나뿐이니 1차원이에요. 쉼표가 붙는 건 0장에서 본 대로 원소가 하나인 튜플은 쉼표를 써야 하기 때문이에요.
아래는 수업 실습 1의 정답이에요. 손으로 먼저 맞혀 보고 확인해 보세요.
| Tensor | shape | ndim | numel | dtype |
|---|---|---|---|---|
torch.tensor(10) | () | 0 | 1 | int64 |
torch.tensor([10, 20, 30, 40]) | (4,) | 1 | 4 | int64 |
torch.tensor([[1, 2], [3, 4], [5, 6]]) | (3, 2) | 2 | 6 | int64 |
torch.zeros(2, 3, 4) | (2, 3, 4) | 3 | 24 | float32 |
마지막 줄의 dtype이 float32인 이유는 zeros가 기본으로 소수 숫자(실수)를 만들기 때문이에요(2-3).
시험엔 이렇게 써요 — 이렇게 고르세요
shape은 각 차원의 크기이며 ndim은 차원 수, numel()은 전체 원소 수이다. 시험 코드에서는 print(tuple(a.shape))처럼 shape을 튜플로 찍는 경우가 많아요. 결과는 (3,), (3, 1) 같은 모양으로 나와요. 원소 수는 shape 숫자를 곱해서 확인하세요.
잠깐 확인 — shape이 (4, 5, 2)인 Tensor의 ndim과 numel은?
ndim은 3, numel은 4×5×2 = 40이에요.
다음 카드 → Tensor 만들기와 dtype
자료: 2주차 · Week02_Tensor_and_GPU(pdf, 풀이포함 ipynb) · 빅분02(2주차) 녹취