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
- 리뷰
- Time Series
- 패혈증 관련 급성 호흡곤란 증후군
- 딥러닝
- multi gpu
- Transformer
- pre-trained llm
- 분산 학습
- GaN
- timesfm
- 의료정보
- irregularly sampled time series
- 대기행렬
- ERD
- gru-d
- m/m/s
- 토픽모델링
- nccl 설치
- operation management
- NTMs
- nccl 업그레이드
- nccl 업데이트
- moirai
- 불규칙적 샘플링
- pytorch
- first pg on this rank that detected no heartbeat of its watchdog.
- length of stay
- queueing theory
- timellm
- ed boarding
Archives
- Today
- Total
데알못정을
신경망 특정 layer 결과 값 출력하기 본문
728x90
신경망에서 특정 layer의 결과 값을 출력할 수 있다. 최근 신경망 관련 연구를 하다가, 신경망의 각 layer의 결과 값이 input data 대비 어떻게 representation 되는지 확인하기 위해 이 작업이 필요 했다.
[전체 코드]
class MLPclassifier(nn.Module):
def __init__(self, input_size, drop_rate):
super(MLPclassifier, self).__init__()
self.input_size = input_size
layer1 = [nn.Linear(input_size, 39),
nn.BatchNorm1d(39),
nn.Dropout(drop_rate),
nn.ReLU()]
layer2 = [nn.Linear(39, 72),
nn.BatchNorm1d(72),
nn.Dropout(drop_rate),
nn.ReLU()]
layer3 = [nn.Linear(72, 129),
nn.BatchNorm1d(129),
nn.Dropout(drop_rate),
nn.ReLU()]
layer4 = [nn.Linear(129, 111),
nn.BatchNorm1d(111),
nn.Dropout(drop_rate),
nn.ReLU()]
layer5 = [nn.Linear(111, 1),
nn.Sigmoid()]
self.first_layer = nn.Sequential(
*layer1
)
self.second_layer = nn.Sequential(
*layer2
)
self.third_layer = nn.Sequential(
*layer3
)
self.fourth_layer = nn.Sequential(
*layer4
)
self.last_layer = nn.Sequential(
*layer5
)
def forward_first(self,x):
x = self.first_layer(x)
return x
def forward_second(self,x):
x = self.second_layer(x)
return x
def forward_third(self,x):
x = self.third_layer(x)
return x
def forward_fourth(self,x):
x = self.fourth_layer(x)
return x
def forward_last(self,x):
x = self.last_layer(x)
return x
def forward(self, x, path='all'):
if path =='all':
x = self.forward_first(x)
x = self.forward_second(x)
x = self.forward_third(x)
x = self.forward_fourth(x)
x = self.forward_last(x)
elif path == 'first':
x = self.forward_first(x)
elif path == 'second':
x = self.forward_first(x)
x = self.forward_second(x)
elif path == 'third':
x = self.forward_first(x)
x = self.forward_second(x)
x = self.forward_third(x)
elif path == 'fourth':
x = self.forward_first(x)
x = self.forward_second(x)
x = self.forward_third(x)
x = self.forward_fourth(x)
elif path == 'last':
x = self.forward_first(x)
x = self.forward_second(x)
x = self.forward_third(x)
x = self.forward_fourth(x)
x = self.forward_last(x)
else:
raise NotImplementedError
return x
각각의 layer를 따로 선언하고 이를 forward 함수에 잘 연계해주면 된다.
아래의 코드를 보면 forward 함수에 path라는 인자를 넣어주고 출력하기를 원하는 layer를 선언해주면 원하는 layer의 출력 값을 얻을 수 있다.
def forward(self, x, path='all'):
if path =='all':
x = self.forward_first(x)
x = self.forward_second(x)
x = self.forward_third(x)
x = self.forward_fourth(x)
x = self.forward_last(x)
elif path == 'first':
x = self.forward_first(x)
elif path == 'second':
x = self.forward_first(x)
x = self.forward_second(x)
elif path == 'third':
x = self.forward_first(x)
x = self.forward_second(x)
x = self.forward_third(x)
elif path == 'fourth':
x = self.forward_first(x)
x = self.forward_second(x)
x = self.forward_third(x)
x = self.forward_fourth(x)
elif path == 'last':
x = self.forward_first(x)
x = self.forward_second(x)
x = self.forward_third(x)
x = self.forward_fourth(x)
x = self.forward_last(x)
else:
raise NotImplementedError
return x
이렇게 코드를 짜고나서 원하는 그림을 그릴 수 있었다. 실제로 layer 별로 값이 어떻게 representation 되는지 확인할 수 있었다.
728x90
'Coding' 카테고리의 다른 글
파이썬 pivot table 생성 시 Memory error 해결하는 방법 (0) | 2023.07.06 |
---|---|
내가 자꾸 까먹어서 올리는 주피터 노트북 가상 환경 만드는 법 (0) | 2023.07.02 |
[오류해결]No module named ipykernel (0) | 2022.11.09 |
Pytorch를 이용한 Dropout 효과 시각화(코드구현) (1) | 2022.09.30 |
pytorch-SGD(확률적 경사하강법 구현) (0) | 2022.09.30 |
Comments