总览
slover
slover这个文件负责 定义optimizer, 对optimizer超参进行设计。
一、build.py
import torch
def make_optimizer(cfg, model):
params = []
for key, value in model.named_parameters(): # model.named_parameters() 返回一个generator
if not value.requires_grad:
continue
lr = cfg.SOLVER.BASE_LR
weight_decay = cfg.SOLVER.WEIGHT_DECAY
if "bias" in key:
lr = cfg.SOLVER.BASE_LR * cfg.SOLVER.BIAS_LR_FACTOR
weight_decay = cfg.SOLVER.WEIGHT_DECAY_BIAS
params += [{"params": [value], "lr": lr, "weight_decay": weight_decay}]
if cfg.SOLVER.OPTIMIZER_NAME == 'SGD':
optimizer = torch.optim.SGD(params, lr, momentum=cfg.SOLVER.MOMENTUM)
return optimizer
这里就不多记录, 要记得 model的属性,和优化器性质,记录下啊????
###二、__init__.py
from .build import make_optimizer
三、总结
通过以上,可以在主函数中通过以下方式定义一个optimizer
from solver import make_optimizer