콘텐츠로 이동

텐서란 무엇인가?

“텐서(Tensor)“라는 단어를 처음 들으면 어렵게 느껴질 수 있습니다. 하지만 사실 텐서는 우리가 매일 접하는 데이터를 담는 그릇입니다. 숫자 하나, 숫자들의 목록, 표, 이미지, 영상 — 이 모두가 텐서입니다.


일상 개념텐서 차원예시
기온 측정값 하나0D (스칼라)25.3
일주일간 기온 목록1D (벡터)[22, 24, 25, 23, 26, 28, 27]
엑셀 스프레드시트2D (행렬)행 = 날짜, 열 = 도시별 기온
컬러 이미지 한 장3D 텐서높이 × 너비 × RGB 채널
동영상 클립4D 텐서프레임 수 × 높이 × 너비 × 채널

숫자 하나 입니다. 점(點) 하나라고 생각하세요.

● → 42
import torch
scalar = torch.tensor(42)
print(scalar) # tensor(42)
print(scalar.ndim) # 0
print(scalar.shape) # torch.Size([])

숫자들이 일렬로 나열된 형태입니다. 수직선 위의 점들을 떠올리세요.

● ● ● ● ● → [1.0, 2.0, 3.0, 4.0, 5.0]
vector = torch.tensor([1.0, 2.0, 3.0, 4.0, 5.0])
print(vector) # tensor([1., 2., 3., 4., 5.])
print(vector.ndim) # 1
print(vector.shape) # torch.Size([5])

숫자들이 표 형태로 배열됩니다. 행(row)과 열(column)로 구성됩니다.

행↓ 열→
[ 1 2 3 ]
[ 4 5 6 ]
[ 7 8 9 ]
matrix = torch.tensor([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
print(matrix.ndim) # 2
print(matrix.shape) # torch.Size([3, 3])

행렬이 여러 겹 쌓인 형태입니다. 컬러 이미지를 생각해보세요 — 빨강, 초록, 파랑 채널이 각각 2D 행렬이고, 이들이 겹쳐집니다.

채널 0 (R): 채널 1 (G): 채널 2 (B):
[ 255 128 64 ] [ 10 20 30 ] [ 0 50 100 ]
[ 200 150 80 ] [ 15 25 35 ] [ 5 55 105 ]
# 높이 2, 너비 3, 채널 3인 이미지 텐서
image = torch.randint(0, 256, (3, 2, 3)) # (C, H, W)
print(image.ndim) # 3
print(image.shape) # torch.Size([3, 2, 3])

딥러닝 학습에서 가장 흔하게 만나는 형태입니다. 배치(Batch) 단위로 이미지를 묶습니다.

shape: (32, 3, 224, 224)
↑ ↑ ↑ ↑
배치 채널 높이 너비
크기
# 32장의 224×224 컬러 이미지 배치
batch = torch.zeros(32, 3, 224, 224)
print(batch.ndim) # 4
print(batch.shape) # torch.Size([32, 3, 224, 224])
# 메모리 사용량 확인
elements = 32 * 3 * 224 * 224
print(f"총 원소 수: {elements:,}") # 4,816,896
print(f"메모리 (float32): {elements * 4 / 1024 / 1024:.1f} MB") # ~18.4 MB

왜 딥러닝에서 텐서가 중요한가?

섹션 제목: “왜 딥러닝에서 텐서가 중요한가?”

딥러닝 모델은 결국 수학적 연산의 연속입니다. 이미지, 텍스트, 오디오 — 모든 데이터를 숫자로 변환하고 연산해야 합니다. 텐서가 중요한 세 가지 이유는 다음과 같습니다.

1. 데이터의 통일된 표현

어떤 종류의 데이터든 텐서로 표현할 수 있습니다. 이미지는 3D 텐서, 문장은 1D 또는 2D 텐서, 음성은 1D 또는 2D 텐서입니다.

2. 병렬 연산 (GPU 가속)

텐서 연산은 GPU에서 수천 개의 코어가 동시에 처리합니다. 예를 들어, 1000만 개의 곱셈을 CPU는 순차적으로 처리하지만 GPU는 병렬로 처리합니다.

3. 자동 미분 (Autograd)

PyTorch 텐서는 연산 기록을 추적하여 역전파(backpropagation)를 자동으로 계산합니다. 이것이 딥러닝 학습의 핵심입니다.

# 자동 미분의 간단한 예시
x = torch.tensor(3.0, requires_grad=True)
y = x ** 2 + 2 * x + 1 # y = x² + 2x + 1
y.backward() # dy/dx = 2x + 2 를 자동 계산
print(x.grad) # tensor(8.) → 2(3) + 2 = 8

  • 텐서 = 숫자를 담는 다차원 그릇
  • 0D(스칼라) → 1D(벡터) → 2D(행렬) → 3D+ (고차원 텐서)
  • 딥러닝에서 모든 데이터(이미지, 텍스트, 오디오)는 텐서로 표현됨
  • PyTorch 텐서의 핵심 강점: GPU 가속 + 자동 미분

다음 장에서는 NumPy와 PyTorch 텐서를 비교하며 차이점을 자세히 알아봅니다.