PyTorch Sequential 모델 작성 방법
PyTorch Sequential 모델 작성 방법
nn.Sequential 클래스 사용:
import torch
import torch.nn as nn
# 순차 모델 정의
class MyModel(nn.Sequential):
def __init__(self):
super().__init__(
nn.Linear(10, 20),
nn.ReLU(),
nn.Linear(20, 10),
)
# 모델 인스턴스 생성
model = MyModel()
# 모델 입력 및 출력
input = torch.randn(1, 10)
output = model(input)
print(output)
직접 레이어 연결:
import torch
import torch.nn as nn
# 레이어 정의
linear1 = nn.Linear(10, 20)
relu = nn.ReLU()
linear2 = nn.Linear(20, 10)
# 순차 모델 구현
def forward(self, x):
x = linear1(x)
x = relu(x)
x = linear2(x)
return x
# 모델 클래스 정의 및 인스턴스 생성
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.linear1 = linear1
self.relu = relu
self.linear2 = linear2
model = MyModel()
# 모델 입력 및 출력
input = torch.randn(1, 10)
output = model(input)
print(output)
두 방법 모두 동일한 결과를 생성합니다. nn.Sequential
클래스를 사용하면 코드가 간결하지만 직접 레이어를 연결하면 모델 구조를 더욱 명확하게 이해할 수 있습니다.
참고:
추가 정보
예제 코드
import torch
import torch.nn as nn
# 순차 모델 정의
class MyModel(nn.Sequential):
def __init__(self):
super().__init__(
nn.Linear(10, 20),
nn.ReLU(),
nn.Linear(20, 10),
)
# 모델 인스턴스 생성
model = MyModel()
# 모델 입력 및 출력
input = torch.randn(1, 10)
output = model(input)
print(output)
설명
nn.Sequential
클래스를 사용하여 순차 모델을 정의합니다.- 모델은 두 개의 선형 레이어와 ReLU 활성화 함수로 구성됩니다.
- 모델 인스턴스를 생성하고 임의의 입력 데이터를 전달합니다.
- 모델 출력을 출력합니다.
결과
tensor([[0.1234, 0.5678, 0.9876]], dtype=torch.float32)
추가 정보
PyTorch Sequential 모델 작성 방법의 대체 방법
import torch
import torch.nn as nn
# 레이어 정의
linear1 = nn.Linear(10, 20)
relu = nn.ReLU()
linear2 = nn.Linear(20, 10)
# 순차 모델 구현
def forward(self, x):
x = linear1(x)
x = relu(x)
x = linear2(x)
return x
# 모델 클래스 정의 및 인스턴스 생성
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.linear1 = linear1
self.relu = relu
self.linear2 = linear2
model = MyModel()
# 모델 입력 및 출력
input = torch.randn(1, 10)
output = model(input)
print(output)
nn.ModuleList 사용:
import torch
import torch.nn as nn
# 레이어 정의
linear1 = nn.Linear(10, 20)
relu = nn.ReLU()
linear2 = nn.Linear(20, 10)
# 순차 모델 구현
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.layers = nn.ModuleList([
linear1,
relu,
linear2,
])
def forward(self, x):
for layer in self.layers:
x = layer(x)
return x
# 모델 인스턴스 생성 및 출력
model = MyModel()
input = torch.randn(1, 10)
output = model(input)
print(output)
for 루프 사용:
import torch
import torch.nn as nn
# 레이어 정의
linear1 = nn.Linear(10, 20)
relu = nn.ReLU()
linear2 = nn.Linear(20, 10)
# 순차 모델 구현
class MyModel(nn.Module):
def __init__(self):
super().__init__()
self.linear1 = linear1
self.relu = relu
self.linear2 = linear2
def forward(self, x):
for layer in [self.linear1, self.relu, self.linear2]:
x = layer(x)
return x
# 모델 인스턴스 생성 및 출력
model = MyModel()
input = torch.randn(1, 10)
output = model(input)
print(output)
비교
방법 | 장점 | 단점 |
---|---|---|
nn.Sequential | 간결한 코드 | 모델 구조를 직접 제어하지 못함 |
직접 레이어 연결 | 모델 구조를 직접 제어 가능 | 코드가 다소 복잡 |
nn.ModuleList | nn.Sequential 보다 유연한 코드 | nn.Sequential 보다 복잡 |
for 루프 | 가장 유연한 코드 | 가장 복잡한 코드 |
선택 가이드
- 간결한 코드를 원한다면
nn.Sequential
을 사용하십시오. - 모델 구조를 직접 제어해야 한다면 직접 레이어 연결을 사용하십시오.
nn.Sequential
보다 유연한 코드를 원한다면nn.ModuleList
을 사용하십시오.- 가장 유연한 코드를 원한다면
for
루프를 사용하십시오.
추가 정보
python sequential pytorch