누발개발
카테고리
작성일
2025. 4. 9. 14:31
작성자
Nuu

텐서(Tensor)

💻 벡터와 스칼라를 일반화한 다차원 배열(N-dimensional array)
⚛️ 좌표계가 바뀌어도 일관된 법칙 아래 변환되는 수학적 객체

📐 선형 변환(곱연산)을 통해 서로 연결된 공간을 표현하는 수학적 구조

 

딥러닝 프레임워크에서는 "모든 연산과 저장을 기본적으로 텐서(Tensor)라는 형태로 처리"

 

 

차원 이름 예시 사용
0D 스칼라 5 손실값, 정확도
1D 벡터 [1,2,3] 특징 벡터
2D 행렬 [[1,2], [3,4]] 입력 × 가중치
3D 텐서 여러 행렬 묶음 시계열, 컬러 이미지
4D 고차원 텐서 (배치, 채널, 높이, 너비) CNN 입력 구조

 

 

텐서 하나로 통일하는 이유?

→ 계산 효율성

텐서는 GPU / TPU에서 병렬로 연산하기 좋은 구조 (CUDA 등)

Matrix multiplication, convolution, dot product, 전부 텐서 기반

→ 프레임워크 일관성

PyTorch, TensorFlow 등 딥러닝 프레임워크는 입력부터 가중치, 출력, 손실, 역전파 gradient까지 모두 텐서로 다룸

다양한 구조(벡터, 행렬, 이미지, 시계열)도 텐서로 표현하면 코드가 단순해짐

 

 

↪ 메모리 저장도 텐서 단위로 관리되지만, 파일로 저장할 땐 조금 다름

용도 저장 형태
모델 파라미터 텐서 (.pt, .ckpt, .h5)
입력 데이터 NumPy 배열 → 텐서 변환
학습 로그 텍스트, CSV, TensorBoard 등
중간 결과 텐서 그대로 디스크에 저장 가능 (예: torch.save)

 

 

텐서의 내부 메모리 구조

→ 데이터 포인터 (data pointer)

실제 값들이 메모리에 연속적으로 저장된 주소

예: [1, 2, 3, 4]이면 메모리에 float32 4개가 쭉 저장됨

→ shape (모양)

텐서가 몇 차원이고, 각 차원에 몇 개의 값이 있는지를 나타냄

예: (2, 3)이면 2행 3열

→ stride (스트라이드) 

다음 차원으로 넘어가기 위해 몇 칸을 건너뛰는지

예: (2, 3) 텐서에서 한 행당 3개 원소 → 다음 행 가려면 3칸 이동

 

 

✔ 생성할 때 메모리 공간이 고정 →  배열처럼 크기 고정(내부적으로 재할당 안 됨)

데이터 크기 → shape(모양) × element_size(dtype에 따라 결정)

  인덱스(index) 기반 접근

 

Tensor  메타데이터( TensorImpl → c++ )

(데이터를 설명하는 정보)

속성 설명 예시
shape 텐서의 모양 (3, 4, 5)
stride 각 차원 이동 시 메모리 건너뛸 간격 (20, 5, 1)
dtype 데이터 타입 float32 (4바이트)
device 저장된 위치 cpu / cuda:0
layout 텐서 레이아웃 (희소/밀집) torch.strided
requires_grad autograd 대상 여부 True / False
data_ptr 실제 데이터 시작 주소 (주소값) 0x7fd...