본문 바로가기

좋아하는 것_매직IT/38.PyTorch

파이토치(PyTorch)로 텐서(Tensor) 이해하기

반응형

블로그 목적 

파이토치 프레임워크를 사용하기 위해서 기본적인 텐서에 대해서 공부및 정리후 나만의 노하우와 지식을 공유한다.

블로그 요약

1. 텐서(Tensor)에 대해서 알아본다.

2. 텐서를 생성하는 다양한 방법을 간단하게 구현해 본다. 

블로그 상세내용

요즘 파이토치가 눈에 들어와서 한번 공부해보자라는 마음으로 책을 보고 있는데요..
책을 보고 정리한 내용을 공유해보면 어떨까 해서 이렇게 블로그를 을 정리해서 남겨보내요.

파이토치(PyTorch)는 딥러닝 및 머신러닝 모델을 구축하고 학습시키는 데 널리 사용되는 파이썬 기반 라이브러리입니다. 텐서는 파이토치의 핵심 데이터 구조로, 수학적으로는 다차원 배열이며, numpy 배열과 유사한 기능을 제공한다고 하네요.

블로그의 첫번째 내용으로  파이토치의 텐서에 대해 기본부터 활용까지 간략히 정리해보고 설명해보도록 하겠습니다. 


텐서란 무엇인가?

제가 공부해 보니 텐서는 데이터를 표현하는 기본 단위라고 하네요.
텐서는 스칼라, 벡터, 행렬, 고차원 배열 등이 모두 텐서의 형태로 표현됩니다.

출처 : Linear Algebra for Deep Learning. The Math behind every deep learning… ❘ by Vihar Kurama ❘ Towards Data Science

  • 스칼라(Scalar) (0차원 텐서): 스칼라는 단일 값? 우리가 흔히 알고 있는 상숫값을 말합니다.
    예를들면  3, 5.5 같은 것을 말하고요.
  • 벡터(Vector) (1차원 텐서): 벡터는 하나의 값을 표현할 때 2개 이상의 수치로 표현한 것입니다.
    값의 리스트? 스칼라의 형태와 동일한 속성을 갖고 있지만 여러 수치값을 이용해 표현하는 방식입니다.
    예를들면  [1, 2, 3] 같은 것을 말합니다. 
  • 행렬(Matrix) (2차원 텐서): 2개 이상의 벡터 값을 통합해 구성된 값이고, 값들이 행과 열로 구성된 형태?
    예를들면  [[1, 2], [3, 4]] 같은 것을 말합니다. 
  • 고차원 텐서 (3차원 이상): 3차원 이상의 다차원 배열? 행렬을 2차원 배열이라고 표현할 수 있다면 텐서는 2차원 이상의 배열이라 표현할 수 있다고 하네요.

텐서 생성하기

파이토치에서 텐서를 생성하는 방법은 다양합니다.

import torch

# 1. 기본적인 텐서 생성
a = torch.tensor([1, 2, 3])
print(a)  # tensor([1, 2, 3])

# 2. 0으로 초기화된 텐서
zeros = torch.zeros(2, 3)
print(zeros)  # tensor([[0., 0., 0.], [0., 0., 0.]])

# 3. 1로 초기화된 텐서
ones = torch.ones(2, 3)
print(ones)  # tensor([[1., 1., 1.], [1., 1., 1.]])

# 4. 랜덤 값 텐서
random_tensor = torch.rand(2, 3)
print(random_tensor)

# 5. numpy 배열을 텐서로 변환
import numpy as np
np_array = np.array([4, 5, 6])
tensor_from_np = torch.from_numpy(np_array)
print(tensor_from_np)  # tensor([4, 5, 6])

텐서 속성

텐서는 크기(shape), 데이터 타입(dtype), 그리고 디바이스(device)에 관한 속성을 가집니다.

b = torch.tensor([[1, 2], [3, 4]])
print(f"Shape: {b.shape}")  # Shape: torch.Size([2, 2])
print(f"Data type: {b.dtype}")  # Data type: torch.int64
print(f"Device: {b.device}")  # CPU 또는 GPU 정보

텐서 연산

파이토치는 다양한 텐서 연산을 지원합니다. 특히 GPU에서 효율적이라고 하죠

x = torch.tensor([1, 2])
y = torch.tensor([3, 4])

# 덧셈
z = x + y
print(z)  # tensor([4, 6])

# 곱셈
z = x * y
print(z)  # tensor([3, 8])

# 행렬 곱셈
a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6], [7, 8]])
result = torch.matmul(a, b)
print(result)  # tensor([[19, 22], [43, 50]])

GPU에서 텐서 사용??

파이토치의 강력한 기능 중 하나는 GPU를 활용한 고속 연산입니다. 텐서를 GPU로 전송하면 연산 속도가 대폭 증가합니다. 저는 안타깝게도 GPU 장비가 없어서;;; 아 연산속도가 대폭 증가하는구나만 머릿속에...;;;

 

그럼 텐서는 어디에 활용될 까요?

텐서는 딥러닝 모델의 입력 데이터로 주로 사용된다고 하고요.
모델의 가중치 및 편향도 텐서로 표현된다고 하네요.
그리고기본적인 데이터 처리부터 고급 연산까지 텐서는 모든 머신러닝 워크플로우의 중심에 있다고 보시면 됩니다. 


맺음말

PyTorch의 텐서는 데이터 과학 및 딥러닝 작업에서 필수적인 구성 요소라고 머릿속에 넣어두려고 합니다. 
블로그에서는 간단한 텐서의 기본적인 생성, 속성, 연산에 대해 살펴보았습니다.
아직은 PyTorch 관련 공부의 걸음마 단계(?) 라서 공부하고 글을 올리고 텐서를 이해하고 다루는 것을 반복하다보면 PyTorch의 강력한 기능을 활용할 수 있는 날도 오겠죠?

그날을 위해서 열심히 오늘도 달려나가보려고 합니다. ^^; 

부족한글 읽어주셔서 진심으로 감사합니다. 

300x250