텐서(Tensor)란?

텐서는 다차원 배열의 일반화된 개념으로, 스칼라(0차원), 벡터(1차원), 행렬(2차원), 그리고 그 이상의 차원을 갖는 다차원 배열을 모두 포괄하는 용어입니다. 주로 머신러닝딥러닝에서 데이터를 다룰 때 사용됩니다. 예를 들어, 이미지 데이터는 보통 3차원 텐서로 표현되고, 비디오 데이터는 4차원 텐서로 표현됩니다.

텐서는 물리학, 공학, 컴퓨터 과학 등에서 다루는 다차원 데이터 구조를 효과적으로 표현하는 도구로, 딥러닝에서는 입력 데이터가중치 등을 표현하는 데 자주 사용됩니다. 텐서를 사용하면 행렬 연산, 벡터 연산 등을 확장해 다양한 차원에서 계산을 수행할 수 있습니다.

텐서의 차원 설명

  1. 0차원 텐서 (스칼라):

    • 값 하나만 있는 데이터로, 예를 들어 3과 같은 숫자가 0차원 텐서입니다.
  2. 1차원 텐서 (벡터):

    • 일렬로 늘어선 값들의 집합입니다. 예를 들어, [1, 2, 3]은 1차원 텐서로, 길이 3인 벡터입니다.
  3. 2차원 텐서 (행렬):

    • 행과 열로 구성된 데이터 집합입니다. 예를 들어, [[1, 2, 3], [4, 5, 6]]은 2x3 크기의 행렬입니다.
  4. 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차원 텐서가 됩니다.

파이썬에서의 텐서 자료구조

파이썬에서 텐서를 다루는 데 가장 많이 사용하는 라이브러리는 NumPyPyTorch, 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 등의 라이브러리를 사용해 텐서를 다룰 수 있습니다.
  • 텐서 연산은 머신러닝과 딥러닝 알고리즘의 핵심 연산으로, 대규모 데이터를 효과적으로 처리하는 데 필수적입니다.

+ Recent posts