벡터를 확장한 개념, 텐서
텐서(Tensor)는 벡터(Vector) 개념을 확장한 다차원 데이터 구조다. 숫자 하나(Scalar)부터 시작해, 숫자를 한 줄로 늘어놓은 벡터, 행과 열로 늘어놓은 행렬(Matrix), 그 이상의 차원까지 표현할 수 있다. 딥러닝은 선형 관계를 넘어 복잡한 비선형 관계를 학습해야 하는데, 데이터를 다차원 공간(텐서)으로 표현하면 더 많은 정보를 한꺼번에 효율적으로 다룰 수 있다.
차원별 텐서
차원 | 이름 | 예시 | 실제 예 |
|---|---|---|---|
0D | Scalar | x = 1 | 숫자 하나 (예: 온도 23.5) |
1D | Vector | x = [1, 2, 3] | 일렬로 나열된 숫자 (예: 한 사람의 나이·소득·점수) |
2D | Matrix | x = [[1,2],[3,4]] | 행과 열로 이뤄진 표 데이터, 흑백 이미지 한 장 |
3D | 3D-Tensor | 여러 행렬을 하나로 묶음 | 컬러 이미지 한 장 — [가로, 세로, 채널(R·G·B)] |
4D | 4D-Tensor | 여러 3D 텐서를 시간 축으로 나열 | 동영상 — [프레임 수, 가로, 세로, 채널] |
Tensor Shape: 각 차원에 숫자가 몇 개씩 들어있나
Tensor Shape는 각 차원이 몇 개의 요소를 담고 있는지 순서대로 나타낸 정보다. 가로 640픽셀, 세로 640픽셀짜리 컬러 이미지 한 장을 예로 들면, RGB 3개 채널을 포함해 (640, 640, 3)이라는 Shape로 표현한다.
이미지 한 장을 텐서로 보기
가로 8칸, 세로 8칸짜리 아주 작은 도트 이미지가 하나 있다고 하자. 사람 눈에는 그냥 그림이지만, 컴퓨터에게 이 그림은 칸마다 색이 하나씩 적힌 격자다.

이 이미지는 컬러이므로, 칸 하나에 색이 “한 개” 들어있는 것이 아니라 빨강(R)·초록(G)·파랑(B) 세 개의 숫자가 들어있다. 각 숫자는 0~255 사이의 밝기 값이다. 실제 값을 칸마다 적어 보면 다음과 같다.
![같은 8x8 도트 캐릭터의 각 칸에 RGB 값을 적은 표. 흰 배경 칸은 [255,255,255], 노란 머리 칸은 [255,241,102], 살구색 얼굴 칸은 [255,221,177], 검은 눈 칸은 [0,0,0], 하늘색 상의 칸은 [120,215,255], 빨간 하의 칸은 [255,114,118], 갈색 신발 칸은 [92,64,64]로 표시돼 있다.](/uploads/tensor-and-tensor-shape-image-rgb-values.png)
정리하면 세로 8칸, 가로 8칸, 그리고 칸마다 RGB 3개다. 그래서 이 이미지 한 장의 Shape는 (8, 8, 3)이고, 축이 3개이므로 3D 텐서다. 숫자는 모두 8 × 8 × 3 = 192개 들어있다.
[
[ [R,G,B], [R,G,B], ... 8개 ], ← 1번째 행
[ [R,G,B], [R,G,B], ... 8개 ], ← 2번째 행
...
[ [R,G,B], [R,G,B], ... 8개 ] ← 8번째 행
]
#이런식으로 나타낼수 있다.
image = [
# 1행
[
[255,255,255], [255,241,102], [255,241,102], [255,241,102],
[255,241,102], [255,241,102], [255,255,255], [255,255,255]
],
# 2행
[
[255,255,255], [255,241,102], [255,241,102], [255,241,102],
[255,241,102], [255,221,177], [255,241,102], [255,255,255]
],
# 3행
[
[255,255,255], [255,241,102], [255,221,177], [0,0,0],
[255,221,177], [0,0,0], [255,241,102], [255,255,255]
],
# 4행
[
[255,255,255], [255,241,102], [255,221,177], [255,221,177],
[255,221,177], [255,221,177], [255,255,255], [255,255,255]
],
# 5행
[
[255,255,255], [77,181,230], [120,215,255], [120,215,255],
[120,215,255], [120,215,255], [77,181,230], [255,255,255]
],
# 6행
[
[255,255,255], [77,181,230], [120,215,255], [120,215,255],
[120,215,255], [120,215,255], [77,181,230], [255,255,255]
],
# 7행
[
[255,255,255], [255,221,177], [255,114,118], [255,114,118],
[255,114,118], [255,114,118], [255,221,177], [255,255,255]
],
# 8행
[
[255,255,255], [255,255,255], [92,64,64], [255,255,255],
[255,255,255], [92,64,64], [255,255,255], [255,255,255]
]
]
Shape를 뒤에서부터 읽으면 이해가 쉽다. 3은 칸 하나의 RGB, 그 앞 8은 그런 칸이 가로로 8개, 맨 앞 8은 그런 줄이 세로로 8개라는 뜻이다.
4프레임 동영상을 텐서로 보기
이번에는 같은 캐릭터가 움직이는 짧은 동영상을 보자. 4장의 그림이 순서대로 반복 재생되는 움짤이다.

움직이는 것처럼 보이지만, 사실은 정지 이미지 4장을 빠르게 넘긴 것뿐이다. 재생을 멈추고 프레임을 펼치면 이렇게 4장이 나온다.

이미지 한 장이 (8, 8, 3)이었으니, 그런 이미지가 4장 쌓인 것이다. 앞에 “프레임 수”라는 축 하나를 더 붙이면 동영상 전체의 Shape는 (4, 8, 8, 3)이 되고, 축이 4개이므로 4D 텐서다.
축 위치 | 크기 | 의미 |
|---|---|---|
0번째 | 4 | 프레임 수 — 이미지가 몇 장 쌓였나 |
1번째 | 8 | 세로 — 한 장의 줄 수 |
2번째 | 8 | 가로 — 한 줄의 칸 수 |
3번째 | 3 | 채널 — 칸 하나의 R·G·B |
차원이 하나 늘어난다는 것은 결국 “같은 것을 여러 개 모았다”는 뜻이다. 숫자를 모으면 벡터, 벡터를 모으면 행렬, 이미지를 모으면 동영상이다. 실제 딥러닝 학습에서는 여기에 “한 번에 몇 개씩 넣을까(batch)”라는 축이 하나 더 붙어 (batch, 프레임, 세로, 가로, 채널)처럼 5D가 되기도 한다.
정리
텐서는 Scalar(0D)부터 Vector(1D), Matrix(2D)를 거쳐 이미지(3D)·동영상(4D)까지 아우르는 다차원 데이터 구조다. Tensor Shape는 각 차원의 크기를 순서대로 나타낸 것으로, 이미지라면 (가로, 세로, 채널)처럼 데이터의 형태를 그대로 드러낸다. 다음 딥러닝 아키텍처 시리즈에서 CNN이 바로 이 3D 텐서(이미지)를 다루는 방법을 다룬다.
참고 자료
numpy.ndarray.shape — NumPy 공식 문서 — 배열의 shape·ndim 속성 정의 (2026-08-07 확인)
댓글 0
댓글을 불러오는 중…