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的变量
超参数更新
(optimizer
和scheduler
都是自己事先定义的变量,前者为优化器,后者为自适应学习率优化器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 了。)