优化器optimizer和超参数更新

  2018-9-10 


optimizer

optimizer.param_group
记录了模型迭代的优化器参数信息
optimizer.step后可从optimizer.param_groups[0][‘params’]查看参数变化
optimizer.param_groups[0]是一个字典
包含dict_keys(['params', 'lr', 'betas', 'eps', 'weight_decay', 'amsgrad'])
所以可以自己看想要的信息,也可以直接修改!

模型权重参数是存在于model.parameters()中的,这个也是要传入optimizer的变量

超参数更新

optimizerscheduler都是自己事先定义的变量,前者为优化器,后者为自适应学习率优化器
optimzer = torch.optim.Adam(……)
scheduler = torch.optim.lr_scheduler.StrpLR(……))

optimizer.step():通常用在每个mini-batch之中,用了之后模型才会更新
scheduler.step():通常用在epoch里面,用了之后才会对学习率lr进行调整
optimizer.zero_grad() 用在每个mini-batch之中,梯度参数清0,以避免参数把上一次optimizer调用时创建的梯度累加在一起(根据pytorch中的backward()函数的计算,当网络参量进行反馈时,梯度是被积累的而不是被替换掉;但是在每一个batch时毫无疑问并不需要将两个batch的梯度混合起来累积,因此这里就需要每个batch设置一遍zero_grad 了。)


且听风吟