전공관련/Deep Learning

[Pytorch] Sequential 모듈 내 레이어에 접근하자

매직블럭 2023. 9. 6. 15:51

일반적으로 sequential 모듈을 정의하면서 레이어 이름을 정의할수도 있지만 

별다른 레이어 명칭을 정하지 않고 sequential 안에 넣은 경우는 해당 레이어에 어떻게 접근해야 하나.. 싶었다.

 

named_children() 으로 호출 해 봐도 

Sequential(
  (0): Linear(~~~~~~)
  (1): BatchNorm1d(~~~~~~)
  (2): Linear(~~~~~~)
  (3): BatchNorm1d(~~~~~~)
)

와 같이 각 레이어들이 0번부터 차례대로 인덱스가 붙어있는것을 확인할 수 있다.

 

그래서.. 저게 순서 인덱스라고.. 생각했으나.. 

단순하게 저게 임의로 할당되는 레이어 이름이었다..

 


그래서 해당 레이어에 접근하려면 일반적인 레이어 접근과 동일하게 _modules 메소드를 이용하면 된다.

# network는 아래 구조만 가지고 있다고 가정하고..
Sequential(
  (0): Linear(~~~~~~)
  (1): BatchNorm1d(~~~~~~)
  (2): Linear(~~~~~~)
  (3): BatchNorm1d(~~~~~~)
)

# 첫번째 linear 레이어에 접근하려면
model.sequential._modules['0']

 

단, 이때 0번부터 시작되는 값은 숫자가 아닌 레이어 이름이니 str 타입이라는 점..