pytorch学习笔记——设置需要学习的参数、优化器设置以及优化器学习率调度

#首先定义网络模型
net = module()
# 定义一个optimizer类,这个类可以用来更新网络参数
optimizer = torch.optim.SGD(net.parameters(),lr=0.01)
# 定义学习率调度器
CosineLR = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer_CosineLR, T_max=150, eta_min=0)
#再求出输出计算出损失函数
output=net(input)
loss_fn(output,target).backward()
loss.backward()
#张量里存留的梯度值清空,因为pytorch不会自动清空梯度值
CosineLR.zero_grad()
#更新参数
CosineLR.step()

torch.optim.lr_scheduler:调整学习率
pytorch中文文档torch.optim
torch.optim.SGD()各参数的解释
在损失函数模块,根据模型输出与真实标签之间的差异得到Loss损失函数;有了Loss,通常采用Pytorch中的 autograd自动梯度求导 得到 模型中每个可学习参数的梯度grad;有了梯度grad,优化器optimizer获取梯度grad,通过一系列优化策略来更新模型参数,该参数就可使得Loss值下降,进而达到模型输出值与真实标签之间的差异减小的目的。
【学习笔记】Pytorch深度学习—优化器(一)
优化器源码

一、 优化器optimizer:

1.什么是优化器

管理更新模型中可学习参数的值,使得模型输出更接近真实标签。
optimizer类:

class Optimizer(object)
      def_init_(self,params,defaults):
      self.defaults=defaults
      self.state=defaultdict(dict)
      self.param_groups=[ ]
      ...
      param_groups=[{'params':param_groups}]

param_groups是管理的参数组,是一个元素为字典的列表,字典是管理的参数组,其中字典一定要包含param这个键值对

2、优化器这个类的方法

zero_grad():清空所管理参数的梯度,ytorch中tensor特性:tensor张量梯度不自动清零
step():执行一步更新
add_param_group():添加参数组,有时想不同参数组可以有不同的学习率等超参数就用这个实现
state_dict():获取优化器当前状态信息字典
load_state_dict():加载状态信息字典

import torch
import torch.optim as optim


w1 = torch.randn(3, 3)
w1.requires_grad = True
w2 = torch.randn(3, 3)
w2.requires_grad = True
o = optim.Adam([w1])
print(o.param_groups)
[{'amsgrad': False,
  'betas': (0.9, 0.999),
  'eps': 1e-08,
  'lr': 0.001,
  'params': [tensor([[ 2.9064, -0.2141, -0.4037],
           [-0.5718,  1.0375, -0.6862],
           [-0.8372,  0.4380, -0.1572]])],
  'weight_decay': 0}]
o.add_param_group({'params': w2})
print(o.param_groups)
[{'amsgrad': False,
  'betas': (0.9, 0.999),
  'eps': 1e-08,
  'lr': 0.001,
  'params': [tensor([[ 2.9064, -0.2141, -0.4037],
           [-0.5718,  1.0375, -0.6862],
           [-0.8372,  0.4380, -0.1572]])],
  'weight_decay': 0},
 {'amsgrad': False,
  'betas': (0.9, 0.999),
  'eps': 1e-08,
  'lr': 0.001,
  'params': [tensor([[-0.0560,  0.4585, -0.7589],
           [-0.1994,  0.4557,  0.5648],
           [-0.1280, -0.0333, -1.1886]])],
  'weight_decay': 0}]

二、学习率调整策略

【学习笔记】Pytorch深度学习—学习率调整策略
orch.optim.lr_scheduler:调整学习率
优化器是存放参数和学习率的,lr_scheduler会去调整优化器里的学习率,所有lr_scheduler必须要关联一个优化器才能改动里面的学习率。
学习率优化策略

三、设置自己想要学习的参数

param_groups = []
if isinstance(self.conv, torch.nn.Conv2d):
	if self.conv.weight.requires_grad:
		param_group_conv = {'params': [self.conv.weight]}
		param_group_conv['lr'] = base_lr * self.lr
		param_group_conv['base_lr'] = base_lr * self.lr
		param_group_conv['weight_decay'] = base_wd
		param_groups.append(param_group_conv)
	if self.conv.bias is not None:
		if self.conv.bias.requires_grad:
			param_group_conv_bias = {'params': [self.conv.bias]}
            param_group_conv_bias['lr'] = base_lr * self.blr
            param_group_conv_bias['base_lr'] = base_lr * self.blr
            param_group_conv_bias['weight_decay'] = 0.0
            param_groups.append(param_group_conv_bias)

你可能感兴趣的:(pytorch学习笔记,pytorch,深度学习,python)