lstm 7. pytorch 사용법

행동하는 개발자·2022년 11월 22일
0

RNN

목록 보기
6/14

model.eval() vs torch_no_grad()

  1. model.eval()은 dropout, batchnorm 등의 기능을 비활성화 시켜 추론 모드로 조정해주는 역할을 한다.

  2. torch.no_grad()는 autograd engine을 비활성화시켜 필요한 메모리를 줄여주고 연산속도를 증가시킨다.

  • autograd engine: 신경망 학습을 지원하는 pytorch의 자동 미분 엔진이다.
  1. torch.no_grad()가 dropout을 비활성화 시키진 않음

출처: https://yuevelyne.tistory.com/10#:~:text=%EC%A6%89%2C%20torch.no_grad()%ED%95%A8%EC%88%98,%EC%A6%9D%EA%B0%80%EC%8B%9C%ED%82%A4%EB%8A%94%20%EC%97%AD%ED%95%A0%EC%9D%84%20%ED%95%A9%EB%8B%88%EB%8B%A4.

pytorch로 신경망을 설계

  • 사용자 정의 nn 모듈

  • nn module을 상속한 클래스 이용

모듈이란 한 개 이상의 레이어가 모여서 구성된 것을 말한다. 참고로 모듈과 모듈을 합쳐도 모듈이다. 신경망은 한 개 이상의 모듈로 이루어진 것을 말함.

pytorch 모델의 구조

import torch.nn as nn
import torch.nn.functional as F

class Model_Name(nn.Module):
    def __init__(self):
    
        super(Model_Name, self).__init__()
        self.module1 = ...
        self.module2 = ...
        
        """
        ex)
        self.conv1 = nn.Conv2d(1, 20, 5)
        self.conv2 = nn.Conv2d(20, 20, 5)
        """

    def forward(self, x):
    
        x = some_function1(x)
        x = some_function2(x)
        
        """
        ex)
        x = F.relu(self.conv1(x))
        x = F.relu(self.conv2(x))
        """
        return x
        
model = Model_Name() # 여기에 변수를 넣어주면 됨.

pytorch 모델로 쓰기 위해선 다음 두 가지 조건을 따라야 한다. 내장된 모델도 이를 만족해야 한다.

  1. torch.nn.Module 을 상속해야 한다.

  2. init과 forward를 override 해야한다.

  • override: 재정의 부모클래스(torch.nn.Module)에서 정의한 메소드를 자식 클래스에서 변경하는 것

  • init에서는 모델에서 사용될 module, activation 등을 정의한다.

  • forward에서는 모델에서 실행되어야 하는 계산을 정의한다. backward 계산은 backward()를 이용하면 pytorch가 알아서 해주니까 forward만 정의하면 된다.

nn.Module

pytorch의 nn 라이브러리는 모든 신경망 모델의 Base Class이다.

nn.Module을 상속한 subclass가 신경망 모델로 사용되기 위해선 앞서 소개한 두 메소드를 override 해야한다.

  • init: 내가 사용하고 싶은, 내 신경망 모델에 사용될 구성품들을 정의 및 초기화 하는 메소드이다.

  • forward: init에서 정의된 구성품들을 연결하는 메소드이다.

출처: https://anweh.tistory.com/21#:~:text=2.,subclass%EB%9D%BC%EA%B3%A0%20%ED%95%A0%20%EC%88%98%20%EC%9E%88%EB%8B%A4.

profile
끊임없이 뭔가를 남기는 사람

0개의 댓글