PyTorch named parameters 메서드
IT 위키
named_parameters()는 PyTorch에서 제공하는 메서드로, 신경망 모델의 모든 학습 가능한 파라미터(parameter)에 대해 해당 파라미터의 이름(name)과 파라미터 객체(torch.nn.Parameter)를 함께 반환한다. 이 메서드는 torch.nn.Module을 상속받은 모든 모델에서 사용 가능하며, 레이어별 파라미터에 이름을 기준으로 접근하거나 필터링할 수 있도록 도와준다.
개요[편집 | 원본 편집]
PyTorch의 모든 모델은 torch.nn.Module을 기반으로 구성되며, 모델 내부에 포함된 하위 모듈과 파라미터들은 자동으로 등록된다. named_parameters() 메서드는 다음과 같은 형태로 호출된다:
for name, param in model.named_parameters():
print(name, param.shape)
이때 반환되는 name은 문자열(str) 형태의 파라미터 이름이고, param은 torch.nn.Parameter 객체이다.
파라미터 등록 조건[편집 | 원본 편집]
- Module 클래스의 속성으로 직접 할당된 torch.nn.Parameter 객체만 named_parameters()의 결과에 포함된다.
- 일반 Tensor는 등록되지 않으며, torch.nn.Parameter로 래핑되어야 한다.
- 리스트나 딕셔너리 등의 컨테이너 안에 파라미터를 포함할 경우, nn.ModuleList 또는 nn.ModuleDict 등의 구조를 사용해야 탐색 가능하다.
주요 인자[편집 | 원본 편집]
named_parameters()는 다음과 같은 인자를 받을 수 있다:
- prefix: 파라미터 이름 앞에 붙일 문자열. 기본값은 빈 문자열이다.
- recurse: 하위 모듈까지 재귀적으로 탐색할지 여부. 기본값은 True이다.
- remove_duplicate: 공유된 파라미터의 중복 반환 여부를 결정한다. 기본값은 True이다.
활용 예[편집 | 원본 편집]
하위 모듈 필터링[편집 | 원본 편집]
for name, param in model.named_parameters():
if "layer1" in name:
print(name, param.size())
이 방식으로 특정 레이어의 파라미터만 추출할 수 있다.
서로 다른 학습률 적용[편집 | 원본 편집]
optimizer = torch.optim.SGD([
{"params": [p for n, p in model.named_parameters() if "layer1" in n], "lr": 0.001},
{"params": [p for n, p in model.named_parameters() if "layer2" in n], "lr": 0.01},
])
named_parameters()를 통해 얻은 이름 정보를 바탕으로 optimizer 설정을 다양화할 수 있다.
주의 사항[편집 | 원본 편집]
- 일부 파라미터가 named_parameters()에 포함되지 않는 경우, Parameter로 등록되어 있는지 확인해야 한다.
- 파라미터를 리스트나 딕셔너리에 직접 넣을 경우, 모델이 그것을 추적하지 못할 수 있다.
- 내부적으로는 모듈의 ._parameters 딕셔너리를 사용하지만, 이는 내부 구현이므로 직접 접근은 권장되지 않는다.