텐서는 단순한 숫자 묶음이 아닙니다. 수학적 용어, 프로그래밍 구현체, 딥러닝의 문맥이 합쳐진 데이터 단위입니다.
구현적 정의: CPU/GPU에서 계산 가능한 다차원 배열(Array).
실무적 정의: 이미지, 음성, 텍스트 등 모든 데이터를 신경망이 이해할 수 있도록 좌표계(Axis) 위에 정렬한 정보 덩어리.

딥러닝 실무에서 "텐서를 이해했다"는 것은 해당 텐서의 Shape이 가진 의미를 안다는 뜻입니다.
| Rank | 이름 | 형상(Shape) 예시 | 실무적 의미 (Deep Learning Context) |
|---|---|---|---|
| 0 | Scalar | () | Loss 값, Accuracy 등 단일 지표 |
| 1 | Vector | (Features,) | 한 샘플의 특성(Feature) 값들 |
| 2 | Matrix | (Samples, Features) | 여러 개의 정형 데이터 (엑셀 형태) |
| 3 | 3D Tensor | (H, W, C) | 이미지 한 장 (세로, 가로, 색상채널) |
| 4 | 4D Tensor | (B, H, W, C) | 이미지 배치 (한 번에 학습할 이미지 묶음) |
핵심 팁: 딥러닝 에러의 대부분은 이 Shape이 맞지 않아 발생합니다. 연산 중간에
print(tensor.shape)를 찍어보는 것이 실무의 기본입니다.
단순 배열과 텐서의 결정적 차이는 '연산의 효율성'과 '히스토리 관리'에 있습니다.
병렬 연산 (Parallel Computing): 텐서는 GPU의 수천 개 코어를 동시에 사용하여 수백만 개의 숫자를 한 번에 계산합니다.
자동 미분 (Autograd): 텐서는 자신이 어떤 연산을 거쳐왔는지 기억합니다. 이를 통해 역전파(Backpropagation) 시 미분 값을 자동으로 계산합니다.
브로드캐스팅 (Broadcasting): 모양이 다른 텐서끼리 연산할 때, 부족한 차원을 논리적으로 늘려 연산하는 강력한 기능을 제공합니다.
YOLO를 예로 들면, 텐서는 "원본 이미지"에서 시작해 "객체 정보"로 변환되는 과정 그 자체입니다.
Shape: (Batch, 640, 640, 3)
의미: 한 번에 Batch개만큼의 이미지를 넣으며, 각 이미지는 640x640 크기의 RGB 채널을 가집니다.
Convolution 연산을 거치며 H, W는 작아지고 C(Channel)는 깊어집니다.
이때 텐서는 이미지의 '추상적인 특징(엣지, 질감 등)'을 담게 됩니다.
Shape: (Batch, 7, 7, 30)
해석:
7x7: 이미지를 7x7 격자(Grid)로 나눈 공간 정보.
30: 각 격자 안에 들어있는 [Box 좌표(4), 신뢰도(1), 클래스 확률(25)] 정보.
tensor[0, 3, 3, 0]: 0번째 이미지의 (3,3) 격자에 있는 첫 번째 값(좌표).
import torch
# 1. 텐서 생성 및 장치 이동
x = torch.randn(1, 3, 640, 640) # 이미지 한 장 (C, H, W 방식)
device = "cuda" if torch.cuda.is_available() else "cpu"
x = x.to(device)
# 2. Shape 변경 (YOLO 등에서 Flatten 할 때 필수)
# view는 메모리를 공유하여 효율적임
output = x.view(1, -1)
# 3. 차원 추가 및 삭제 (Batch 차원 만들 때 자주 사용)
x = x.unsqueeze(0) # (1, 3, 640, 640) -> (1, 1, 3, 640, 640)
x = x.squeeze() # 크기가 1인 차원 모두 제거
모든 것은 텐서다: 입력부터 출력, 손실 함수까지 딥러닝의 모든 통신 언어는 텐서입니다.
좌표의 의미를 파악하라: tensor[b, c, h, w]에서 각 인덱스가 무엇(배치인지, 채널인지)을 뜻하는지 아는 것이 설계의 시작입니다.
연산은 축(Axis) 기준이다: 합치고(concat), 쪼개고(split), 더하는 모든 연산은 특정 축을 기준으로 일어납니다.
"텐서는 데이터에 '구조적 의미'라는 생명력을 불어넣은 상태입니다."