딥러닝을 시작하려면 데이터를 담는 그릇인 텐서(Tensor)를 이해해야 합니다. "엑셀(DataFrame) 쓰면 되지 않나요?"라고 하실 수 있지만, 딥러닝의 연산(GPU 가속)을 위해서는 모든 데이터가 텐서 형태여야 합니다.
오늘은 텐서의 차원별 개념과, 왜 우리가 텐서플로우 대신 파이토치를 써야 하는지 알아봅니다.
1. 텐서(Tensor)란 무엇인가?
텐서는 데이터의 차원(Rank/Axis)에 따라 이름이 달라집니다. 의료 데이터로 비유하면 다음과 같습니다.
① 스칼라 (Scalar, 0D Tensor)
- 정의: 축(Axis)이 없는 하나의 숫자.
- 의료 예시: 환자 A의 체온 36.5
- 특징: 차원이 0입니다. 수학적으로는 $x \in \mathbb{R}$ 로 표현합니다.
② 벡터 (Vector, 1D Tensor)
- 정의: 숫자들이 일렬로 늘어선 배열. 축이 1개입니다.
- 의료 예시: 환자 A의 바이탈 사인 [나이, 키, 몸무게, 혈압]
- 특징: 1차원 배열입니다. 파이토치에서는 torch.Size([4])와 같이 표현됩니다.
③ 행렬 (Matrix, 2D Tensor)
- 정의: 행(Row)과 열(Column) 2개의 축을 가진 데이터.
- 의료 예시: 엑셀 시트 그 자체! (행: 환자들, 열: 검사 항목들)
- 특징: 보통 (n, m) 형태로 크기(Shape)를 표현합니다.
④ 3차원 텐서 (3D Tensor)
- 정의: 행렬(2D)이 여러 장 겹쳐 있는 형태.
- 의료 예시: MRI 영상이나 CT 스캔. (가로 $\times$ 세로 $\times$ 깊이/Slice).
- 특징: 시계열 데이터(환자 100명의 30일간의 기록)도 3차원 텐서로 표현됩니다.

2. 텐서의 핵심 용어: Rank, Shape, Axis
파이토치로 코딩할 때 에러가 가장 많이 나는 부분입니다. 꼭 기억하세요!
- 랭크 (Rank): 축(Axis)의 개수입니다. 차원(Dimension)이라고도 합니다.
- 코드: tensor.dim()으로 확인 가능
- 크기 (Shape/Size): 각 축마다 데이터가 몇 개씩 있는지 나타냅니다.
- 예시: 100명의 환자가 30일 동안 측정한 5가지 바이탈 사인 $\rightarrow$ Shape: (100, 30, 5)
3. 행렬 곱셈 (Matrix Multiplication)
딥러닝의 내부는 거대한 행렬 곱셈의 연속입니다.
계산은 컴퓨터가 해주지만, "앞 행렬의 열 개수와 뒤 행렬의 행 개수가 같아야 한다"는 규칙은 알아야 에러를 잡을 수 있습니다.
- $(N \times \mathbf{M}) \times (\mathbf{M} \times K) = (N \times K)$
- 가운데 차원($M$)이 서로 맞물려야 연산이 됩니다.
4. 왜 '파이토치(PyTorch)' 인가? (vs 텐서플로우)
딥러닝 프레임워크 3대장(Keras, TensorFlow, PyTorch) 중, 왜 우리는 파이토치를 선택했을까요?
| 구분 | TensorFlow | PyTorch |
| 특징 | 정적 그래프 | 동적 그래프 |
| 장점 | 예전 코드가 많음, 배포에 유리 |
직관적임, 디버깅 쉬움 |
| 단점 | 배우기 어려움 | 배포가 조금 약함 |
의료 AI 논문들은 대부분 PyTorch로 구현되어 있습니다. 최신 논문(SOTA)을 내 데이터에 적용해보려면 파이토치가 필수입니다. 또한 코드가 파이썬스럽고 직관적이라 배우기 훨씬 쉽습니다.
5. [실습] 파이토치 설치 및 텐서 만들기
이제 파이토치를 설치하고 내 손으로 첫 텐서를 만들어봅시다.
설치 명령어
윈도우나 맥 터미널(Anaconda Prompt)에서 아래 명령어를 실행하세요.
pip install torch torchvision
(GPU를 쓰신다면 pytorch.org에서 내 컴퓨터에 맞는 명령어를 복사하는 것이 좋습니다 )
파이썬 실습 코드
import torch
import numpy as np
# 1. 버전 확인
print(f"PyTorch Version: {torch.__version__}")
# 2. 의료 데이터 텐서 만들기
# 환자 1명의 [나이, 혈압, 체온]
vital_signs = [45, 120, 36.5]
tensor_1d = torch.tensor(vital_signs)
print("\n--- 1D Tensor (Vector) ---")
print(f"값: {tensor_1d}")
print(f"차원(Rank): {tensor_1d.dim()}") # 1
print(f"크기(Shape): {tensor_1d.shape}") # torch.Size([3])
# 3. 2D 텐서 (여러 명의 데이터)
patients = [
[45, 120, 36.5],
[50, 130, 37.0],
[30, 110, 36.2]
]
tensor_2d = torch.tensor(patients)
print("\n--- 2D Tensor (Matrix) ---")
print(f"값:\n{tensor_2d}")
print(f"차원(Rank): {tensor_2d.dim()}") # 2
print(f"크기(Shape): {tensor_2d.shape}") # torch.Size([3, 3]) -> (환자수, 항목수)

'Study Note > Deep Learning' 카테고리의 다른 글
| [PyTorch] 의료 데이터를 위한 텐서(Tensor) 완전 정복 (1) | 2025.12.31 |
|---|---|
| [PyTorch 기초] 의료 데이터를 텐서(Tensor)로 만드는 법 (1) | 2025.12.30 |
| 수학으로 한 방에 풀까, 조금씩 찾아갈까? (최소제곱법 vs 경사하강법) (0) | 2025.12.30 |
| AI는 어떻게 '최적의 선'을 찾을까? (선형회귀와 경사하강법) (0) | 2025.12.30 |
| 의료 데이터 분석가, 딥러닝의 기초 체력을 다지다 (0) | 2025.12.30 |