[Pytorch-기초강의] 파이토치로 구현하는 ANN (텐서와 autograd)

2023. 3. 1. 22:51·AI Research/Deep Learning
728x90
반응형

1. 텐서와 Autograd

▶텐서(Tensor)란?

파이토치에서 다양한 수식을 계산하는데 사용하는 기본적 자료구조, 숫자들의 특정한 모양으로 배열한 것

● 차원(랭크)이 0 : 숫자가 1개 ==> 스칼라(scalar)

● 차원(랭크)이 1 : 일렬로 숫자를 나열 ==> 벡터(vector)

● 차원(랭크)이 2 : 숫자를 가로, 세로로 나열 ==> 행렬(matrix)

● 차원(랭크)이 3이상: N차원 Tensor

​

예를 들어, 아래와 같이 3*3 텐서를 선언했다면,

x=torch.tensor([[1,2,3], [4,5,6], [7,8,9]])

size = [3, 3], shape = [3, 3], 랭크 = 2입니다.

 

또한 텐서의 랭크와 shape은 unsqueeze(), squeeze(), view() 함수를 사용해서 인위로 바꿀수도 있습니다. 이 함수들은 원소 개수는 유지하며 모양과 차원만 변경합니다.

● unsqueeze(): 지정한 자리에 1이라는 차원 값을 추가해주는 함수입니다. 아래 코드는 0번째자리에 1이라는 차원 값이 추가됩니다.

x=torch.unsqueeze(x, 0)

 

● squeeze(): 1이라는 차원 값을 제거해주는 함수입니다.

x=torch.squeeze(x)

 

● view(): 지정한 모양으로 텐서를 변경합니다.

x = x.view(9)

​

▶ 텐서를 이용한 연산과 행렬곱

- A의 열 수와 B의 행 수는 같아야합니다.

- 행렬곱 A x B의 결과 행렬의 행 개수는 A와 같고, 열의 개수는 B와 같습니다.

​

​

▶Autograd

● 수식의 기울기를 자동으로 계산하는 것

● 경사하강법(gradient descent) : 오차를 수학 함수로 표현하여 미분한 뒤, 이 함수의 기울기를 구해 오차의 최솟값이 있는 방향을 찾아내는 알고리즘입니다.

=> 머신러닝에서의 오차란?

정답(ground truth) - 예측 값(prediction value) = 거리(distance)

학습 데이터에 대하여 이 거리들의 평균 = 오차(loss)

경사하강법

● Pytorch의 Autograd는 미분 계산을 자동화 하여 경사 하강법을 직접 구현하지 않고 사용가능합니다.

● 사용법 : 값이 1.0인 스칼라 텐서 w를 정의하고, w의 requires _grad를 True로 설정해주면, 파이토치의

Autograd 기능이 자동으로 계산할 때 w에 대한 미분값을 w.grad에 저장합니다.

w = torch.tensor(1.0, requires _grad=True)

 

 

2. 경사하강법으로 이미지 복원하기

▶정상적이지 않은 이미지로부터 원본 이미지를 복원해내는 코드입니다.

▶ 사용 코드 (전체 코드는 여기를 참고해주세요!)

 

GitHub - jgyy4775/3-min-pytorch: <펭귄브로의 3분 딥러닝, 파이토치맛> 예제 코드

<펭귄브로의 3분 딥러닝, 파이토치맛> 예제 코드. Contribute to jgyy4775/3-min-pytorch development by creating an account on GitHub.

github.com

 

- 필요한 라이브러리를 import 합니다.

import torch 
import pickle # 이미지 파일 로딩을 위한 라이브러리
import matplotlib.pyplot as plt # 이미지 출력을 위한 라이브러리

 

- 이미지를 import하여 시각화 합니다.

broken _image = torch.FloatTensor( pickle.load(open('./broken _
image _t.p', 'rb'),encoding='latin1' ) )
plt.imshow(broken _image.view(100,100))

 

- 무작위 텐서를 weird_function()함수에 입력해 얻은 가설 텐서와 오염된 이미지 사이의 오차를 구하는 함수입니다.

def distance _loss(hypothesis, broken _image):
    return torch.dist(hypothesis, broken _image)

 

- 경사하강법의 반복을 통해 실제 원본 이미지가 될 랜덤 이미지와  학습률 (learning rate)를 정의합니다. 

random_tensor = torch.randn(10000, dtype = torch.float)
lr = 0.8

학습률이란 학습을 얼마나 급하게 진행하는가를 정하는 값입니다.

학습률에 따른 학습 속도

 

- 일정 반복을 통해 학습을 진행하는 main 함수를 구현합니다.

for i in range(0,20000):
    random_tensor.requires_grad_(True) # 미분을 위해 requires_grad를 True로 설정
    hypothesis = weird_function(random_tensor)
    loss = distance_loss(hypothesis, broken_image) #  hypothesis와 broken_image 사이의 오차(loss)를 계산
    loss.backward() # backward함수로 loss 역전파

    # 직접 gradient descent를 구현하기 때문에 torch.no_grad 함수를 사용하여, 자동 기울기 계산을 비활성화
    with torch.no_grad():
        # loss가 최대값이 되는 방향의 반대 방향으로 이동
        random_tensor = random_tensor - lr*random_tensor.grad

    if i % 1000 == 0:
        print('Loss at {} = {}'.format(i, loss.item()))

plt.imshow(random_tensor.view(100,100).data)

- 복원된 이미지를 시각화한 모습입니다.

 

728x90
반응형
저작자표시 (새창열림)

'AI Research > Deep Learning' 카테고리의 다른 글

[Pytorch-기초강의] 이미지 처리 능력이 탁월한 CNN(Deep CNN)  (0) 2023.03.01
[Pytorch-기초강의] 이미지 처리 능력이 탁월한 CNN(CNN의 기초)  (0) 2023.03.01
[Pytorch-기초강의] 패션 아이템을 구분하는 DNN  (1) 2023.03.01
[Pytorch-기초강의] 파이토치로 구현하는 ANN(ANN)  (0) 2023.03.01
[Pytorch-기초강의] 1. 딥러닝과 파이토치  (0) 2023.03.01
'AI Research/Deep Learning' 카테고리의 다른 글
  • [Pytorch-기초강의] 이미지 처리 능력이 탁월한 CNN(CNN의 기초)
  • [Pytorch-기초강의] 패션 아이템을 구분하는 DNN
  • [Pytorch-기초강의] 파이토치로 구현하는 ANN(ANN)
  • [Pytorch-기초강의] 1. 딥러닝과 파이토치
ga.0_0.ga
ga.0_0.ga
    반응형
    250x250
  • ga.0_0.ga
    ##뚝딱뚝딱 딥러닝##
    ga.0_0.ga
  • 전체
    오늘
    어제
    • 분류 전체보기 (181)
      • Paper Review (51)
        • Video Scene Graph Generation (6)
        • Image Scene Graph Generation (18)
        • Graph Model (5)
        • Key Information Extraction (4)
        • Fake Detection (2)
        • Text to Image (1)
        • Diffusion Personalization (4)
        • etc (11)
      • AI Research (49)
        • Deep Learning (30)
        • Artificial Intelligence (15)
        • Data Analysis (4)
      • Pytorch (10)
      • ONNX (5)
      • OpenCV (2)
      • Error Note (34)
      • Linux (2)
      • Docker (3)
      • Etc (7)
      • My Study (16)
        • Algorithm (10)
        • Project (4)
        • Interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그래프신경망
    Logistic regression
    TypeError
    contiguous
    Activation Function
    pytorch
    linear regression
    3dinput
    HRNet
    pandas
    dataset
    permute
    차원의 저주
    활성화 함수
    torch.nn
    오차 역전파
    transformer
    정규화
    forch.nn.functional
    tensorflow
    GCN
    알고리즘
    dataloader
    i3d
    나이브 베이즈 분류
    fine tuning
    Inductive bias
    RuntimeError
    JNI
    ONNX
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
ga.0_0.ga
[Pytorch-기초강의] 파이토치로 구현하는 ANN (텐서와 autograd)
상단으로

티스토리툴바