Pytorch优化器-Optimizer

简介

pytorch优化器:管理并更新模型中可学习参数的值,是的模型输出更接近真实标签。

导数:函数在指定坐标轴上的变化率
方向导数:指定方向上的变化率
梯度:一个向量,方向为方向导数取得最大值的方向
在这里插入图片描述

pytorch中的optimizer

基本属性:

  • default:优化器超参数
  • state:参数的缓存,如momentum的缓存
  • param_groups:管理的参数组
  • _step_count:记录更新次数,学习率调整中使用

在这里插入图片描述

基本方法

  • zero_grad():清空所管理参数的梯度
    pytorch特性:张量梯度不会自动清零 需要在使用完梯度之后需要清零
  • step():实行一步参数更新
  • add_param_group():添加参数组
  • state_dict():获取优化器当前状态信息字典
  • load_state_dict():加载状态信息字典
    后两个方法,用于模型断点状态训练
optimizer=optim.SGD(net.parameters(),lr=LR,momentum=0,9) #选择优化器
scheduler=torch.optim.lr_scheduler.StepLR(optimizer,step_size=10,gamma=0.1) #设施学习率下降策略
保存优化器信息
torch.save(optimizer.state_dict(),os.path.join(BASE_DIR,"optimizer_state_dict.pkl"))


##lode sate_dict
state=torch.load(os.path.join(BASE_DR,"optimizer_state_dict.pkl"))
optimizer.load_sate_dict(state)
学习率

梯度下降: W i + 1 = W i − g ( W i ) W_{i+1}=W_{i}-g(W_{i}) Wi+1=Wig(Wi)
y = f ( x ) = 4 ∗ x 2 y ′ = f ′ ( x ) = 8 ∗ x y=f(x)=4*x^2 \\ y'=f'(x)=8*x y=f(x)=4x2y=f(x)=8x

x 0 = 2 , y 0 = 16 , f ′ ( x 0 ) = 16 x 1 = x 0 − f ′ ( x 0 ) = 2 − 16 = − 14 x 1 = − 14 , y 1 = 784 , f ′ ( x 1 ) = − 112 x 2 = x 1 − f ′ ( x 1 ) = − 14 + 112 = 98 , y 2 = 38416.... x_{0}=2,y_0=16,f'(x_0)=16 \\ x_1=x_0-f'(x_0)=2-16=-14 \\ x_1=-14,y_1=784,f'(x_1)=-112 \\ x_2=x_1-f'(x_1)=-14+112=98,y_2=38416 .... x0=2,y0=16,f(x0)=16x1=x0f(x0)=216=14x1=14,y1=784,f(x1)=112x2=x1f(x1)=14+112=98,y2=38416....

可以看出,如果没有学习率,损失值并不会收敛,很容易梯度爆炸
修正之后的公式: W w + 1 = W i − L R ∗ g ( W i ) W_{w+1}=W_{i}-LR*g(W_i) Ww+1=WiLRg(Wi)

学习率(learning rate)控更新的步伐

动量(Momentum)

Momentum(动量、冲量):结合当前梯度与上一次更新信息,用于当前更新

指 数 加 权 平 均 : v t = v t − 1 + ( 1 − β ) ∗ θ t 指数加权平均:v_t=v_{t-1}+(1-\beta)*\theta_t :vt=vt1+(1β)θt

在这里插入图片描述
个人看法:可以看到这个式子认为,100这个点对应的更新量是和之前的所有点的值有关,只不过里100这个点越近的点,权值越大,有点类似于自控原理里面的主导极点
在这里插入图片描述
动量值通常取0.9

常用的优化器

1.optim.SGD
在这里插入图片描述

在这里插入图片描述

2.推荐使用SGD和Adam

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值