본문 바로가기

AI/Pytorch

[Pytorch] 파이토치 모델 정의, 사전 학습 모델

모델 정의

nn.Module 상속 클래스 정의

  • nn.Module을 상속받는 클래스 정의
  • __init__(): 모델에서 사용될 모듈과 활성화 함수 등을 정의
  • forward(): 모델에서 실행되어야 하는 연산을 정의
from torch import nn

class Model(nn.Module):  
  def __init__(self, inputs):  
    super (Model, self).**init**()  
    self.layer = nn.Linear(inputs, 1)  
    self.activation = nn.Sigmoid()  
  def forward(self, x):  
    x = self.laywer(x)  
    x = self.activation(x)  
return x

model = Model(1)  
print(list(model.children()))  
print(list(model.modules()))

[Linear(in_features=1, out_features=1, bias=True), Sigmoid()] [Model( (layer): Linear(in_features=1, out_features=1, bias=True) (activation): Sigmoid() ), Linear(in_features=1, out_features=1, bias=True), Sigmoid()]

nn.Sequential을 이용한 신경망 정의

  • nn.Sequential 객체로 그 안에 각 모듈을 순차적으로 실행
  • __init__():에서 사용할 네트워크 모델들을 nn.Sequential로 정의 가능
  • forward()에서 실행되어야 할 계산을 가독성 높게 작성 가능
class Model(nn.Module):
  def __init__(self):
    super (Model, self).__init__()
    self.layer1 = nn.Sequential(
        nn.Conv2d(in_channels=3, out_channels=64, kernel_size=5),
        nn.ReLU(inplace=True),
        nn.MaxPool2d(2)
    )

    self.layer2 = nn.Sequential(
        nn.Conv2d(in_channels=64, out_channels=30, kernel_size=5),
        nn.ReLU(inplace=True),
        nn.MaxPool2d(2)
    )

    self.layer2 = nn.Sequential(
        nn.Linear(in_features=30*5*5, out_features=30, bias=True),
        nn.ReLU(inplace=True)
    )
  def forward(self, x):
    x = self.layer1(x)
    x = self.layer2(x)
    x = x.view(x.shape[0],-1)
    x = self.layer3(x)
    return x

model = Model()
print(list(model.children()))
print(list(model.modules()))

[Sequential( (0): Conv2d(3, 64, kernel_size=(5, 5), stride=(1, 1)) (1): ReLU(inplace=True) (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) ), Sequential( (0): Linear(in_features=750, out_features=30, bias=True) (1): ReLU(inplace=True) )] [Model( (layer1): Sequential( (0): Conv2d(3, 64, kernel_size=(5, 5), stride=(1, 1)) (1): ReLU(inplace=True) (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) ) (layer2): Sequential( (0): Linear(in_features=750, out_features=30, bias=True) (1): ReLU(inplace=True) ) ), Sequential( (0): Conv2d(3, 64, kernel_size=(5, 5), stride=(1, 1)) (1): ReLU(inplace=True) (2): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) ), Conv2d(3, 64, kernel_size=(5, 5), stride=(1, 1)), ReLU(inplace=True), MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False), Sequential( (0): Linear(in_features=750, out_features=30, bias=True) (1): ReLU(inplace=True) ), Linear(in_features=750, out_features=30, bias=True), ReLU(inplace=True)]

파이토치 사전학습모델

Reference

이수안컴퓨터연구소 - 파이토치 한번에 끝내기 PyTorch Full Tutorial Course

'AI > Pytorch' 카테고리의 다른 글

Pytorch collate_fn 이란?  (0) 2023.02.27
[Pytorch] 파이토치의 구성요소, 데이터 준비  (0) 2022.08.12