PyTorch Containers

2022. 1. 28. 13:23Deep Learning/PyTorch

Container는 여러 개의 Module들을 묶어서 사용하고 싶을 때 사용한다.

 

다음은 PyTorch에서 제공하는 Container들이다.

Module 모든 신경망 모델들의 base 클래스
Sequential 하나의 순차적인 container
ModuleList sub-module들을 하나의 list로 가짐
ModuleDict sub-module들을 하나의 dict로 가짐
ParameterList Parameter들을 하나의 list로 가짐
ParameterDict Parameter들을 하나의 dict로 가짐

 

# Sequential

생성자에 전달된 순서대로 인수된 Module이 추가된다. 여기서 인수로는 *Module나 OrderDict로 모듈을 전달할 수 있다.

 

Sequential의 forward() 메서드에서는 모든 입력들을 받고, 첫 번째 Module로 전달한다. 그후 Module의 출력을 다음 후속Module로 순차적으로 연결하는 과정을 반복하며, 마지막 Module의 출력을 반환한다. 이처럼 Sequential 모듈은 수동으로 Module을 일일이 호출하지 않고, 전체 Container를 하나의 모듈로서 정해진 순서대로 처리한다.

 

Q. ModuleList과의 차이점은?
     ModuleList는 Module들을 저장하기 위한 목록으로 볼 수 있다면,
     Sequential은 계단식으로(cascading하게) 앞선 출력이 후속 입력으로 연결된다는 점이다.

 

예를 들면, 다음과 같이 연쇄적으로 합을 구하는 Module을 구성할 수 있다.

def add_seq(x):
    # net = x + 3 + 2 + 5
    net = nn.Sequential(
        Add(x),
        Add(3),
        Add(2),
        Add(5)
    )
    return net(0) # 초기값

print(torch.tensor([1])) # 11

 

# ModuleList

Python의 List와 같이 목록에 Module들을 저장하며, 각 Module을 indexing하여 접근할 수 있다.

Sequential와 달리, 상황에 따라 유연하게 원하는 Module만 진행할 수도 있다.

 

예를 들면, 위 기능을 다음과 같이 구성할 수 있다.

def add_modulelist(x):
    li = nn.ModuleList([Add(2), Add(3), Add(5)])
    
    for i, _ in enumerate(li):
    	x = li[i].forward(x)
    return x

 

 

반응형

'Deep Learning > PyTorch' 카테고리의 다른 글

AutoGrad 구조 및 이해  (0) 2022.02.02
Module의 apply() 메서드  (0) 2022.01.28
Module 클래스  (0) 2022.01.28
PyTorch 란?  (0) 2022.01.28
Dataset의 기본 구성 요소  (0) 2022.01.28