본문 바로가기
C.W.K.
Stream
Lesson 01 of 11 · published

텐서가 진짜 뭐냐

~12 min · tensor, ndarray, shape

Level 0텐서 탐구자
0 XP0/62 lessons0/13 achievements
0/120 XP to next level120 XP to go0% complete

n차원 배열에 특별한 능력 두 가지

딥러닝의 신비를 걷어내면 텐서는 결국 n차원 배열이야. NumPy의 ndarray와 같은 개념이지. 다만 PyTorch 텐서에는 NumPy 배열과 구별되는 특징이 두 가지 있어:

  1. 장치 투명성. 인자 하나만 바꾸면 같은 코드가 CPU, NVIDIA GPU(CUDA), Apple Silicon GPU(MPS)에서 돌아가.
  2. Autograd. 각 연산이 계산 그래프에 자신을 기록할 수 있어서, PyTorch가 나중에 역전파로 그래프를 거슬러 올라가 기울기를 계산해.

차원은 이렇게 읽으면 돼:

  • 0D 스칼라: 숫자 하나. torch.tensor(3.14)
  • 1D 벡터: 숫자 한 줄. torch.tensor([1, 2, 3])
  • 2D 행렬: 행과 열로 된 표. 행 × 열
  • 3D: 행렬을 묶은 배치. 시퀀스에서는 (batch, seq_len, features) 형태가 흔해.
  • 4D: 이미지 배치. PyTorch의 NCHW 관례에서는 (batch, channels, height, width)로 나타내.

수학자라면 '텐서'에는 공변성과 반변성까지 포함된 더 엄격한 뜻이 있다고 항의할 거야. 딥러닝에서는 이 단어를 빌려와 'autograd가 붙은 n차원 배열'이라는 느슨한 뜻으로 써. 프레임워크와 문서, 논문도 모두 이 뜻을 따르니 여기서는 그 흐름에 올라타자.

가볍게 경고 하나만 할게. 모양은 PyTorch에서 가장 쓸모 있는 디버깅 도구야. 뭔가 깨지면 가장 먼저 print(x.shape)를 실행해. 이 습관은 일찍 들일수록 좋아.

Code

모든 차원의 텐서·python
import torch

# 0D — scalar
scalar = torch.tensor(3.14)
print(scalar.ndim, scalar.shape)  # 0  torch.Size([])

# 1D — vector
vector = torch.tensor([1.0, 2.0, 3.0])
print(vector.shape)               # torch.Size([3])

# 2D — matrix
matrix = torch.tensor([[1, 2], [3, 4], [5, 6]])
print(matrix.shape)               # torch.Size([3, 2])

# 3D — batch of sequences (batch=2, seq=3, features=4)
seq_batch = torch.randn(2, 3, 4)
print(seq_batch.shape)            # torch.Size([2, 3, 4])

# 4D — batch of images (NCHW: batch=8, channels=3, H=224, W=224)
images = torch.randn(8, 3, 224, 224)
print(images.shape)               # torch.Size([8, 3, 224, 224])
PyTorch ↔ NumPy 정신 모델·python
import torch
import numpy as np

# A NumPy person already knows this:
arr = np.zeros((3, 4))
print(arr.shape, arr.dtype)        # (3, 4) float64

# PyTorch is the same plus device + autograd:
t = torch.zeros(3, 4)
print(t.shape, t.dtype, t.device)  # torch.Size([3, 4]) torch.float32 cpu

# Note the dtype default changed: NumPy → float64, PyTorch → float32.
# float32 is the deep-learning default because it's twice as fast on GPU
# and almost always 'good enough' precision for gradients.

External links

Exercise

PyTorch가 설치된 Python REPL을 열어. 0D부터 4D까지 각 차원의 텐서를 하나씩 만들고 .shape, .ndim, .numel()을 출력해. 출력하기 전에 값을 먼저 예측해 봐. 큰 4D 배치의 .numel()을 잘못 예측하는 건 규모가 커졌을 때 가장 흔히 하는 모양 실수야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.