Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- torch.nn
- Deep learning
- 파이썬문법
- torch
- 가상환경구축
- tensorflow
- ViT
- vsC
- DeepLearning
- torch.nn.Module
- Anaconda
- 머신러닝
- vision transformer
- __init__
- objectdetection
- pytorch
- pychram
- python
- AI
- CNN
- NumPy
- __call__
- 파이썬
- 딥러닝
- Torchvision
- rnn
- 컴퓨터비전
- 가상환경
- LSTM
- segmentation
Archives
- Today
- Total
인공지능을 좋아하는 곧미남
torch.nn.Sequential 본문
오늘은 딥러닝 아키텍쳐를 구현할때 여러 Layer를 순서대로 층을 구성할 수 있는 방법인
nn.Sequential 클래스에 관해 알아보겠습니다.
제가 준비한 내용은 아래와 같습니다.
< INDEX >
1. nn.Sequential의 목적
2. nn.Sequential의 사용방법
3. nn.Sequential에서 원하는 layer 불러오기.
4. 내용 고찰
1. nn.Sequential의 목적
- Multi Layer 구성을 만들기 위해 사용
2. nn.Sequential의 사용방법
- 코딩 시 표현법은 총 두 가지입니다.
1) layer마다 nn.Sequential Instance 부여하기
self.layer1 = nn.Sequential(
ConvLSTM(in_channels=num_channels, out_channels=num_kernels,
kernel_size=kernel_size, padding=padding,
activation=activation, frame_size=frame_size)
nn.BatchNorm3d(num_features=num_kernels)
)
self.layer2 = nn.Sequential(
ConvLSTM(in_channels=num_kernels, out_channels=num_kernels,
kernel_size=kernel_size, padding=padding,
activation=activation, frame_size=frame_size)
nn.BatchNorm3d(num_features=num_kernels)
)
self.layer3 = nn.Sequential(
ConvLSTM(in_channels=num_kernels, out_channels=num_kernels,
kernel_size=kernel_size, padding=padding,
activation=activation, frame_size=frame_size)
nn.BatchNorm3d(num_features=num_kernels)
)
def forward(self, x):
x = self.layer1(x)
x = self.layer2(x)
x = self.layer3(x)
return x
2) sequential 객체 생성 후 .add_module() 메서드로 추가하기
self.sequential = nn.Sequential()
# Add First layer (Different in_channels than the rest)
self.sequential.add_module(
"convlstm1", ConvLSTM(
in_channels=num_channels, out_channels=num_kernels,
kernel_size=kernel_size, padding=padding,
activation=activation, frame_size=frame_size)
)
self.sequential.add_module(
"batchnorm1", nn.BatchNorm3d(num_features=num_kernels)
)
# Add rest of the layers
for l in range(2, num_layers + 1):
self.sequential.add_module(
f"convlstm{l}", ConvLSTM(
in_channels=num_kernels, out_channels=num_kernels,
kernel_size=kernel_size, padding=padding,
activation=activation, frame_size=frame_size)
)
self.sequential.add_module(
f"batchnorm{l}", nn.BatchNorm3d(num_features=num_kernels)
)
def forward(self, x):
x = self.sequential(x)
return x
- for 문을 활용하여 layer의 name을 정한 layer 구성을 구축함.
- .add_module 정의한 순서대로 layer가 쌓인다. -> multi layer를 구성하기 좋다.
- 이때 Input으로 들어간 데이터가 첫 번째 layer를 거치고 난 후 return되는 output이 다음 순서의 layer의 input으로 들어가게 됩니다.
3. nn.Sequential에서 원하는 layer 불러오기.
Sequential객체.layer명(input)
.add_module()로 추가한 layer name으로 접근하여 layer 연산을 수행할 수 있습니다.
4. 내용 고찰
위의 1)번 방법은 보다 직관적으로 layer 구성을 짤 수 있지만, multi layer를 for문으로 구성하는데 한계가 있는 듯하다. 하지만 2)번 방법은 for문을 통해 동일한 layer 구성의 층을 쉽게 구현할 수 있다.
'code_study > pytorch' 카테고리의 다른 글
pytorch의 def forward(self, x) (0) | 2022.01.18 |
---|---|
BackBone Encoder Layer에서 Feature Map 추출 (0) | 2022.01.17 |
pytorch DataLoader (0) | 2022.01.10 |
[pytorch] torch.nn.Module.parameters(), named_parameters() (0) | 2021.12.10 |
[pytorch] torch.nn.Module Build (0) | 2021.12.10 |
Comments