텐서(Tensor)의 종류

calico·2026년 1월 2일

Artificial Intelligence

목록 보기
155/164

1. 텐서의 본질: "의미를 담은 다차원 그릇"


텐서는 단순한 숫자 묶음이 아닙니다. 수학적 용어, 프로그래밍 구현체, 딥러닝의 문맥이 합쳐진 데이터 단위입니다.

  • 구현적 정의: CPU/GPU에서 계산 가능한 다차원 배열(Array).

  • 실무적 정의: 이미지, 음성, 텍스트 등 모든 데이터를 신경망이 이해할 수 있도록 좌표계(Axis) 위에 정렬한 정보 덩어리.



2. 차원(Rank)과 형상(Shape)


딥러닝 실무에서 "텐서를 이해했다"는 것은 해당 텐서의 Shape이 가진 의미를 안다는 뜻입니다.

Rank이름형상(Shape) 예시실무적 의미 (Deep Learning Context)
0Scalar()Loss 값, Accuracy 등 단일 지표
1Vector(Features,)한 샘플의 특성(Feature) 값들
2Matrix(Samples, Features)여러 개의 정형 데이터 (엑셀 형태)
33D Tensor(H, W, C)이미지 한 장 (세로, 가로, 색상채널)
44D Tensor(B, H, W, C)이미지 배치 (한 번에 학습할 이미지 묶음)

핵심 팁: 딥러닝 에러의 대부분은 이 Shape이 맞지 않아 발생합니다. 연산 중간에 print(tensor.shape)를 찍어보는 것이 실무의 기본입니다.



3. 왜 리스트(List)가 아닌 텐서를 쓰는가?


단순 배열과 텐서의 결정적 차이는 '연산의 효율성''히스토리 관리'에 있습니다.

  1. 병렬 연산 (Parallel Computing): 텐서는 GPU의 수천 개 코어를 동시에 사용하여 수백만 개의 숫자를 한 번에 계산합니다.

  2. 자동 미분 (Autograd): 텐서는 자신이 어떤 연산을 거쳐왔는지 기억합니다. 이를 통해 역전파(Backpropagation) 시 미분 값을 자동으로 계산합니다.

  3. 브로드캐스팅 (Broadcasting): 모양이 다른 텐서끼리 연산할 때, 부족한 차원을 논리적으로 늘려 연산하는 강력한 기능을 제공합니다.



4. YOLO 모델에서의 텐서 흐름 (The Flow)


YOLO를 예로 들면, 텐서는 "원본 이미지"에서 시작해 "객체 정보"로 변환되는 과정 그 자체입니다.


① 입력 단계 (Input Tensor)

  • Shape: (Batch, 640, 640, 3)

  • 의미: 한 번에 Batch개만큼의 이미지를 넣으며, 각 이미지는 640x640 크기의 RGB 채널을 가집니다.


② 연산 단계 (Hidden Layers)

  • Convolution 연산을 거치며 H, W는 작아지고 C(Channel)는 깊어집니다.

  • 이때 텐서는 이미지의 '추상적인 특징(엣지, 질감 등)'을 담게 됩니다.


③ 출력 단계 (Output Tensor / YOLO v1 기준)

  • Shape: (Batch, 7, 7, 30)

  • 해석:

    • 7x7: 이미지를 7x7 격자(Grid)로 나눈 공간 정보.

    • 30: 각 격자 안에 들어있는 [Box 좌표(4), 신뢰도(1), 클래스 확률(25)] 정보.

    • tensor[0, 3, 3, 0]: 0번째 이미지의 (3,3) 격자에 있는 첫 번째 값(xx좌표).



5. 실무자용 텐서 조작 핵심 코드 (PyTorch)


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인 차원 모두 제거



6. 정리


  1. 모든 것은 텐서다: 입력부터 출력, 손실 함수까지 딥러닝의 모든 통신 언어는 텐서입니다.

  2. 좌표의 의미를 파악하라: tensor[b, c, h, w]에서 각 인덱스가 무엇(배치인지, 채널인지)을 뜻하는지 아는 것이 설계의 시작입니다.

  3. 연산은 축(Axis) 기준이다: 합치고(concat), 쪼개고(split), 더하는 모든 연산은 특정 축을 기준으로 일어납니다.

"텐서는 데이터에 '구조적 의미'라는 생명력을 불어넣은 상태입니다."

profile
개인 블로그

0개의 댓글