Sequential 신경망을 정의하는 방법
nn.Sequential을 사용하면 __init__()에서 사용할 네트워크 모델들을 정의해 줄 뿐만 아니라 forward() 함수에서는 모델에서 실행되어야 할 계산을 좀 더 가독성이 뛰어나게 코드로 작성할 수 있습니다. 또한, Sequential 객체는 그 안에 포함된 각 모듈을 순차적으로 실행해 주는데 다음과 같이 코드를 작성할 수 있습니다.
import torch.nn as nn class MLP(nn.Module): def __init__(self): super(MLP, 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.layer3 = nn.Sequential( nn.Linear(in_features=30*5*5, out_features=10, 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 = MLP() ------ 모델에 대한 객체 생성 print("Printing children\n------------------------------") print(list(model.children())) print("\n\nPrinting Modules\n------------------------------") print(list(model.modules()))