모델 정의
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
'AI > Pytorch' 카테고리의 다른 글
Pytorch collate_fn 이란? (0) | 2023.02.27 |
---|---|
[Pytorch] 파이토치의 구성요소, 데이터 준비 (0) | 2022.08.12 |