텐서란 무엇인가?
텐서, 어렵지 않습니다
섹션 제목: “텐서, 어렵지 않습니다”“텐서(Tensor)“라는 단어를 처음 들으면 어렵게 느껴질 수 있습니다. 하지만 사실 텐서는 우리가 매일 접하는 데이터를 담는 그릇입니다. 숫자 하나, 숫자들의 목록, 표, 이미지, 영상 — 이 모두가 텐서입니다.
일상의 비유로 이해하기
섹션 제목: “일상의 비유로 이해하기”| 일상 개념 | 텐서 차원 | 예시 |
|---|---|---|
| 기온 측정값 하나 | 0D (스칼라) | 25.3 |
| 일주일간 기온 목록 | 1D (벡터) | [22, 24, 25, 23, 26, 28, 27] |
| 엑셀 스프레드시트 | 2D (행렬) | 행 = 날짜, 열 = 도시별 기온 |
| 컬러 이미지 한 장 | 3D 텐서 | 높이 × 너비 × RGB 채널 |
| 동영상 클립 | 4D 텐서 | 프레임 수 × 높이 × 너비 × 채널 |
차원별 시각적 비교
섹션 제목: “차원별 시각적 비교”0D — 스칼라 (Scalar)
섹션 제목: “0D — 스칼라 (Scalar)”숫자 하나 입니다. 점(點) 하나라고 생각하세요.
● → 42import torch
scalar = torch.tensor(42)print(scalar) # tensor(42)print(scalar.ndim) # 0print(scalar.shape) # torch.Size([])1D — 벡터 (Vector)
섹션 제목: “1D — 벡터 (Vector)”숫자들이 일렬로 나열된 형태입니다. 수직선 위의 점들을 떠올리세요.
● ● ● ● ● → [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) # 1print(vector.shape) # torch.Size([5])2D — 행렬 (Matrix)
섹션 제목: “2D — 행렬 (Matrix)”숫자들이 표 형태로 배열됩니다. 행(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) # 2print(matrix.shape) # torch.Size([3, 3])3D 텐서
섹션 제목: “3D 텐서”행렬이 여러 겹 쌓인 형태입니다. 컬러 이미지를 생각해보세요 — 빨강, 초록, 파랑 채널이 각각 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) # 3print(image.shape) # torch.Size([3, 2, 3])4D 텐서
섹션 제목: “4D 텐서”딥러닝 학습에서 가장 흔하게 만나는 형태입니다. 배치(Batch) 단위로 이미지를 묶습니다.
shape: (32, 3, 224, 224) ↑ ↑ ↑ ↑ 배치 채널 높이 너비 크기# 32장의 224×224 컬러 이미지 배치batch = torch.zeros(32, 3, 224, 224)print(batch.ndim) # 4print(batch.shape) # torch.Size([32, 3, 224, 224])
# 메모리 사용량 확인elements = 32 * 3 * 224 * 224print(f"총 원소 수: {elements:,}") # 4,816,896print(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 텐서를 비교하며 차이점을 자세히 알아봅니다.