torch의optim 모듈

1705 단어 Pytorch
최근에 BoF의 일부 Trick을 보았는데 코드 구현에서 파라미터에 대한 weightdecay는 권적층의 권중만 정규화 제약하고 모든 매개 변수를 제약하지 않으며 코드는 말하지 않습니다. torchvision에서 정의한resnet18을 예로 들면
import torchvision
import torch.optim as optim
model1 = torchvision.models.resnet18()
parmas = []
params_dict = dict(model1.named_parameters())
for k ,v in params_dict.items():
    if 'conv{}.weight'.format(1,2) in k:
        parmas.append({'params':v,'weight_decay':0.001})
    else:
        parmas.append({'params':v,'weight_decay':0.0})

optimizier = optim.SGD(parmas,lr=0.001,weight_decay=0.001)

for param_group in optimizier.param_groups:
    print(param_group['weight_decay'])

여기서 나는 하나의 문제를 생각했다. 우리의 매개 변수 사전은params를 가입할 때'weight'를 설정했다.decay',하지만optimizier를 정의할 때 weightdecay, 우리가 정의한 weight를 덮어쓸지 여부decay는요, 검증을 거치면 안 돼요.그리고optim의 중국어 문서를 보러 갔습니다.
우리가 최적화기를 정의할 때 SGD를 예로 들면 우리는 반드시 파라미터를 전달해야 한다. 바보 강좌에서optimizier=optim을 정의한다.SGD(model 1.parameters), 이 모델 1.parameters ()는optim 내부에서 자동으로 사전으로 변환됩니다. 즉 {'params': 모델 1. parameters ()} 이 사전의 키는 고정적입니다.'params','lr','weightdecay','eps'등이지만 최종optimizier에는list의 형식이므로 우리는optimizier를 통과할 수 있습니다.param_그룹스 접근, 모든list의 요소는 사전입니다. 사전에는 정의된 매개 변수 등 정보가 있습니다. 우리는optimizier=optim에 있습니다.SGD(parmas, lr=0.001, weight decay=0.001)에 정의된 lr, weightdecay 우리한테만 이 param그룹s의 사전이 이 내용을 정의하지 않았을 때 효력이 발생합니다. 만약 우리처럼
{'params':v,'weight_decay':0.001}

사전에 정의하면 우리가 정의한 내용을 덮어쓰지 않고 정의되지 않은 사전만 해당 키의 초기화합니다.
학습률을 수정하면 다음과 같이 정의할 수 있습니다.
for param_group in optimizier.param_groups:
    param_group['lr']= lr

좋은 웹페이지 즐겨찾기