torch.nn.Module
- 딥러닝을 구성하는 layer의 base class
- 하나의 function, 여러 function으로 이루어진 layer, layer로 이루어진 model이 포함될 수 있다. (Module이 다른 Module을 포함할 수 있다.)
torch.nn.Sequential
- 모듈(Module)들을 하나로 묶어 순차적으로 실행시키고 싶을 때 사용
torch.nn.ModuleList
- 리스트와 같이 인덱싱으로 원하는 모듈을 가져다 쓰고 싶을 때 사용
- ModuleList를 써야 submodule로 등록하여, 파라미터 값들의 학습이 일어나게 된다.
torch.nn.ModuleDict
- 딕셔너리와 같이 key값을 통해 원하는 모듈을 가져다 쓰고 싶을 때 사용
torch.nn.Parameter
- 일반 텐서와 달리 parameter는 계속 최적값으로 업데이트되어야 한다.
- torch.nn.Parameter 함수를 이용해야 값을 저장하고 계산가능하게 유지해준다.
+ register_buffer를 이용하면, Parameter와 같이 gradient를 계산하여 값을 업데이트해주지는 않지만, 모델 저장시에 buffer값이 저장되게 된다.
named_children vs named_modules
- 모델 내부의 module들 목록을 확인하게 해주는 함수
for name, module in model.named_modules
과 같이 사용하면 된다.
- named_children은 바로 아래단계의 모듈 목록들을 알려준다.
- named_modules은 해당 모듈에 속한 모든 모듈을 알려준다. (모듈안에 모듈이 들어갈 수 있으므로, 그렇게 속한 모듈들을 다 알려주는 것)
- 모듈의 이름이 필요하지 않은 경우에는 named를 뺀,
modules
, children
을 사용하면 된다.
get_submodule
- 특정 module을 가져와서 쓰고 싶을 때 사용
model.get_submodule('서브모듈 이름')
과 같이 사용
named_parameters
- 모델 내부의 Parameter들 목록을 확인하게 해주는 함수
for name, parameter in model.named_parameters()
과 같이 사용하면 된다.
- 모듈의 이름이 필요하지 않은 경우에는 named를 뺀,
parameters
을 사용하면 된다.
get_parameter
- 특정 모듈에 속한 특정 파라미터를 가져다 쓰고 싶을 때 사용
model.get_parameter('모듈이름.파라미터이름')
과 같이 사용