728x90
반응형
파이토치에서 모델을 정의하기 위해서는 모듈을 상속한 클래스를 사용합니다.
- 계층(Layer) : 모듈 또는 모듈을 구성하는 한 개의 계층 (합성곱층 convolutional layer, 선형계층 Linear layer)
- 모듈(module) : 한 개 이상의 계층이 모여서 구성된 것. 모듈이 모여 새로운 모듈을 만들 수도 있습니다.
- 모델(model) : 최종적으로 원하는 네트워크로, 한 개의 모듈이 모델이 될 수도 있습니다.
1. nn.Module을 상속받지 않고 정의하는 방법
매우 단순한 모델을 만들 때 사용합니다. 구현이 쉽고 단순하다는 장점이 있습니다.
model = nn.Linear(in_features = 1, out_features = 1, bias = True)
2. nn.Module을 상속하여 정의하는 방법
파이토치에서 nn.Module을 상속받는 모델은 기본적으로 __init__() 과 forward() 함수를 포함합니다.
- __init__() : 모델에서 사용된 모듈(nn.linear, nn.Conv2d), 활성화 함수 등을 정의
- forward() : 모델에서 실행되어야 하는 연산을 정의
class MLP(Module):
def __init__(self, inputs):
super(MLP, self).__init__()
self.layer = Linear(inputs, 1) # 계층 정의
self.activation = Sigmoid() # 활성화 함수 정의
def forward(self, X):
X = self.layer(X)
X = self.activation(X)
return X
3. Sequential을 사용하여 신경망을 정의하는 방법
nn.sequentail을 사용하면 __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
model = MLP()
print(list(model.children()))
print(list(model.modules()))
4. 함수를 사용하여 신경망을 정의하는 방법
Sequentail을 이용하는 것과 동일하지만, 함수로 선언할 경우 변수에 저장해 놓은 계층들을 재사용할 수 있는 장점이 있습니다. 하지만 모델이 복잡해지는 단점도 있습니다.
def MLP(in_features = 1, hidden_features = 20, out_features = 1):
hidden = nn.Linear(in_features = in_features, out_features = hidden_features, bias = True)
activation = nn.ReLU()
output = nn.Linear(in_features = hidden_features, out_features = out_features, bias = True)
net = nn.Sequential(hidden, activation, output)
return net
728x90
반응형
'pytorch' 카테고리의 다른 글
[pytorch] 3. 모델 학습 (파이토치 학습 절차) (0) | 2023.04.05 |
---|---|
[pytorch] 2. 모델 파라미터(손실 함수/ 옵티마이저 / 학습률 스케줄러) (0) | 2023.04.04 |
[pytorch] tensor(텐서) 생성/이해/조작 (0) | 2023.03.19 |
[pytorch] pytorch 특징 / pytorch 아키텍처 / pytorch 장점 / pytorch API 종류 (0) | 2023.03.14 |
[pytorch] 딥러닝 학습 순서 / 딥러닝의 종류 (0) | 2023.03.12 |