1. 텐서(tensor)란?
아래의 그림을 통해 텐서(tensor)에 대해 직관적으로 이해할 수 있다.
x = 5, y = 7과 같은 값 1은 스칼라이다. 스칼라 모이면 벡터, 벡터의 차원이 높아질수록 행렬 -> 3차원 텐서 -> 4차원 텐서 ->...n차원 텐서라고 명칭한다. 즉 텐서(tensor)는 3차원 이상의 행렬으로, 데이터의 배열이다. 이때 차원은 rank로 표현한다.
텐서(tensor)는 GPU나 하드웨어 가속기에서 실행할 수 있다는 점을 제외하면 Numpy의 ndarray와 매우 유사하다. 그렇다면 왜 numpy를 사용하지 않고 굳이 Pytorch에서 tensor 메소드를 사용하는 걸까?
2. Pytorch를 사용하는 이유_ Tensor와 Pytorch
앞에서 텐서(tensor)는 n차원 배열이고, numpy의 ndarray와 비슷하다고 했다. numpy의 ndarray와 다른 점은 파이토치(pytorch)로 자동 미분(automatic differentition)을 할수 있는 것이다. 따라서 파이토치(pytorch)는 딥러닝의 계산을 편리하게 사용하기 위한 프로그램 라이브러리이고, 텐서는 3차원 이상의 배열을 나타낼 수 있기 때문에, 딥러닝의 계산 도구에 많이 쓰인다. (참고자료: https://tutorials.pytorch.kr)
파이토치(pytorch는 anaconda 가상환경에 설치하고, 다음과 같은 명령어를 통해 사용할 수 있다.
import torch
3. 여러가지 텐서(tensor) 만드는 방법
- 데이터 직접 넣기
data = torch.tensor([[2,3,4,],[5,1,2]])
- 랜덤으로 만들기
rnd = torch.rand(2,4) # 2x4 random Tensor
rnd_n = torch.randn(2,3) # 정규분포 랜덤값으로 생성됨.
rnd_int = torch.randint(0, 10, size(2,4)) # [0,10) 범위 사이의 랜덤값
- 0으로 구성된 텐서. dtype은 텐서 원소들의 type(int, float..)을 결정한다.
z = torch.zeros(2,4, dtype = torch.long)
- 넘파이(numpy) 배열로부터 생성하기
import numpy as np
arr = np.array(data)
np_arr = torch.from_numpy(arr)
- 특정 상수(constant)로 텐서 생성하기
x = torch.ones(2,4) # 원소가 1로 구성된 2x4 텐서
4. 텐서(tensor)와 파이토치(pytorch)를 활용하여 자동 미분하기
required_grad는 텐서에 대한 기울기 값을 기록한다는 뜻이다.
backward는 최종 연산된 tensor 객체를 역전파(back propagation)하는 것이다. 기울기를 계산하기 위해 이를 활용한다.
w = torch.tensor(2.0, requires_grad=True) # 값이 2인 임의의 스칼라 텐서 w 선언.
y = w**2 #수식 정의
y.backward() # w에 대한 미분을 하기 위해 backward 메서드 호출하고, 기울기 계산.
w = tensor(2., required_grad = True)
grad() 메서드를 통해 w에 대해 미분한 값이 저장된 것을 확인할 수 있다.
print(w.grad) # w로 미분한 값이 저장된 것 확인
w.grad = tensor(4.)
5. 파이토치(pytorch)에서는 왜 텐서(tensor)의 자동 미분 함수를 제공할까?
기본적으로 파이토치는 딥러닝의 계산을 위한 라이브러리이다.
딥러닝의 핵심은 미분을 통해 손실함수의 값을 최소화 하는 것이고, 이는 "경사하강법"으로 찾는다.
(경사하강법: 비용함수를 미분하여 기울기를 구해서 비용이 최소화가 되는 방향을 찾는 방법)
즉 손실 함수의 최솟값을 구하기 위해(딥러닝의 핵심) 함수의 기울기를 구해야 하므로, 파이토치에서는 자동미분을 제공하여, 딥러닝의 핵심 내용이 원활하게 이루어지도록 돕는것이다!
읽어주셔서 감사합니다.
💕피드백과 질문은 언제든 환영입니다. 💕
'ML' 카테고리의 다른 글
[python/AI] Python 외부 라이브러리 설치 및 관리 총정리 (0) | 2023.07.15 |
---|---|
[python/AI] MNIST란? MNIST 데이터 개념 / 컴퓨터 비전 / 인공신경망 (0) | 2022.11.15 |
[python/AI] matplotlib 개념/사용/데이터시각화 (2) | 2022.10.25 |