텐서(Tensor)란?
텐서는 다차원 배열의 일반화된 개념으로, 스칼라(0차원), 벡터(1차원), 행렬(2차원), 그리고 그 이상의 차원을 갖는 다차원 배열을 모두 포괄하는 용어입니다. 주로 머신러닝과 딥러닝에서 데이터를 다룰 때 사용됩니다. 예를 들어, 이미지 데이터는 보통 3차원 텐서로 표현되고, 비디오 데이터는 4차원 텐서로 표현됩니다.
텐서는 물리학, 공학, 컴퓨터 과학 등에서 다루는 다차원 데이터 구조를 효과적으로 표현하는 도구로, 딥러닝에서는 입력 데이터와 가중치 등을 표현하는 데 자주 사용됩니다. 텐서를 사용하면 행렬 연산, 벡터 연산 등을 확장해 다양한 차원에서 계산을 수행할 수 있습니다.
텐서의 차원 설명
0차원 텐서 (스칼라):
- 값 하나만 있는 데이터로, 예를 들어
3
과 같은 숫자가 0차원 텐서입니다.
- 값 하나만 있는 데이터로, 예를 들어
1차원 텐서 (벡터):
- 일렬로 늘어선 값들의 집합입니다. 예를 들어,
[1, 2, 3]
은 1차원 텐서로, 길이 3인 벡터입니다.
- 일렬로 늘어선 값들의 집합입니다. 예를 들어,
2차원 텐서 (행렬):
- 행과 열로 구성된 데이터 집합입니다. 예를 들어,
[[1, 2, 3], [4, 5, 6]]
은 2x3 크기의 행렬입니다.
- 행과 열로 구성된 데이터 집합입니다. 예를 들어,
3차원 이상 텐서:
3차원부터는 "텐서"라는 용어가 주로 사용됩니다. 예를 들어, RGB 이미지 데이터는 각 픽셀이 (R, G, B) 값으로 구성된 3차원 텐서입니다.
3차원 텐서 예시:
- 3차원 텐서는 높이 × 너비 × 채널과 같은 구조로 데이터가 배열됩니다.
- 예:
[ [ [1, 2], [3, 4] ], [ [5, 6], [7, 8] ] ]
는 (2, 2, 2) 크기의 3차원 텐서입니다.
4차원 텐서 예시:
- 4차원 텐서는 보통 배치(batch) × 높이 × 너비 × 채널과 같은 형식으로 사용됩니다.
- 예: 여러 이미지를 다룰 때, 각 이미지가 3차원 텐서로 나타내어질 수 있고, 이를 묶으면 4차원 텐서가 됩니다.
파이썬에서의 텐서 자료구조
파이썬에서 텐서를 다루는 데 가장 많이 사용하는 라이브러리는 NumPy
와 PyTorch
, TensorFlow
입니다.
- NumPy: 과학 계산에서 자주 사용되는 다차원 배열을 다루는 라이브러리로, 딥러닝 모델을 직접 작성할 때 주로 사용되지는 않지만, 기본적인 텐서 연산을 처리하는 데 사용됩니다.
- PyTorch: 딥러닝 프레임워크로, 기본적으로
Tensor
라는 자료형을 사용하여 다차원 배열을 다룹니다. - TensorFlow: 딥러닝 프레임워크로,
Tensor
자료형을 통해 텐서 연산을 수행합니다.
1. NumPy
에서 텐서 다루기
NumPy
는 다차원 배열을 쉽게 만들고 연산할 수 있는 강력한 기능을 제공합니다. 다음은 NumPy
를 사용해 텐서를 생성하고 다루는 예시입니다.
텐서 생성
import numpy as np
# 0차원 텐서 (스칼라)
scalar = np.array(42)
print("0차원 텐서 (스칼라):", scalar)
# 1차원 텐서 (벡터)
vector = np.array([1, 2, 3])
print("1차원 텐서 (벡터):", vector)
# 2차원 텐서 (행렬)
matrix = np.array([[1, 2, 3], [4, 5, 6]])
print("2차원 텐서 (행렬):\n", matrix)
# 3차원 텐서
tensor_3d = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("3차원 텐서:\n", tensor_3d)
텐서의 차원과 크기 확인
# 텐서의 차원 확인
print("3차원 텐서의 차원:", tensor_3d.ndim)
# 텐서의 크기(모양) 확인
print("3차원 텐서의 모양:", tensor_3d.shape)
텐서 연산
NumPy
를 사용해 텐서 간의 기본적인 연산을 수행할 수 있습니다.
# 두 텐서 더하기
tensor_1 = np.array([[1, 2], [3, 4]])
tensor_2 = np.array([[5, 6], [7, 8]])
tensor_sum = tensor_1 + tensor_2
print("텐서 더하기 결과:\n", tensor_sum)
# 텐서 곱하기 (요소별 곱셈)
tensor_mul = tensor_1 * tensor_2
print("텐서 곱하기 결과:\n", tensor_mul)
2. PyTorch
에서 텐서 다루기
PyTorch
는 머신러닝과 딥러닝에 많이 사용되는 텐서 기반의 프레임워크입니다.
텐서 생성
import torch
# 0차원 텐서 (스칼라)
scalar = torch.tensor(42)
print("0차원 텐서 (스칼라):", scalar)
# 1차원 텐서 (벡터)
vector = torch.tensor([1, 2, 3])
print("1차원 텐서 (벡터):", vector)
# 2차원 텐서 (행렬)
matrix = torch.tensor([[1, 2, 3], [4, 5, 6]])
print("2차원 텐서 (행렬):\n", matrix)
# 3차원 텐서
tensor_3d = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("3차원 텐서:\n", tensor_3d)
텐서 연산
# 텐서 덧셈
tensor_sum = tensor_1 + tensor_2
print("텐서 더하기 결과:\n", tensor_sum)
# 텐서 곱셈
tensor_mul = tensor_1 * tensor_2
print("텐서 곱하기 결과:\n", tensor_mul)
GPU에서 텐서 연산
PyTorch
에서는 GPU에서 텐서 연산을 수행할 수 있습니다.
# GPU에서 텐서 생성 및 연산
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
tensor_gpu = torch.tensor([[1, 2], [3, 4]], device=device)
3. TensorFlow
에서 텐서 다루기
TensorFlow
에서도 텐서를 기본 자료형으로 사용합니다.
텐서 생성
import tensorflow as tf
# 0차원 텐서 (스칼라)
scalar = tf.constant(42)
print("0차원 텐서 (스칼라):", scalar)
# 1차원 텐서 (벡터)
vector = tf.constant([1, 2, 3])
print("1차원 텐서 (벡터):", vector)
# 2차원 텐서 (행렬)
matrix = tf.constant([[1, 2, 3], [4, 5, 6]])
print("2차원 텐서 (행렬):\n", matrix)
# 3차원 텐서
tensor_3d = tf.constant([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print("3차원 텐서:\n", tensor_3d)
결론
- 텐서는 스칼라부터 다차원 배열까지 모든 형태의 데이터 구조를 표현할 수 있는 유연한 자료구조입니다.
- 파이썬에서는
NumPy
,PyTorch
,TensorFlow
등의 라이브러리를 사용해 텐서를 다룰 수 있습니다. - 텐서 연산은 머신러닝과 딥러닝 알고리즘의 핵심 연산으로, 대규모 데이터를 효과적으로 처리하는 데 필수적입니다.
'다차원 자료구조 생성 및 방법' 카테고리의 다른 글
[다차원 자료구조 생성 및 방법] 리스트 상속 다차원 자료구조 2 (7) | 2024.10.26 |
---|---|
[다차원 자료구조 생성 및 방법] 딕셔너리 상속 다차원 자료구조 2 (12) | 2024.10.25 |
[다차원 자료구조 생성 및 방법] 네임드 튜플 `collections` 모듈 자료구조 (11) | 2024.10.21 |
[다차원 자료구조 생성 및 방법] 파이썬에서의 벡터 공간 (4) | 2024.10.19 |
[다차원 자료구조 생성 및 방법] `namedtuple`을 상속한 다차원 자료구조 (0) | 2024.10.16 |