PyTorch概述(八)---ADAM

import torch
torch.optim.Adam(params,
                 lr=0.001,
                 betas=(0.9,0.999),
                 eps=1e-8,
                 weight_decay=0,
                 amsgrad=False,
                 *,
                 foreach=None,
                 maximize=False,
                 capturable=False,
                 differentiable=False,
                 fused=None)
  • 类torch.optim.Adam实现Adam算法

Adam算法描述

  • 输入:\gamma(lr),\beta_1,\beta_2(betas),\theta_0(params),f(\theta)(objective),\lambda(weight decay),
  • amsgrad,maximize
  • 初始化:m0\leftarrow 0(first- moment),v0\leftarrow0(second-moment),\widehat{v0}^{max}\leftarrow 0
  • for t=1 to ...do
    • if maximize:
      • g_t\leftarrow -\bigtriangledown_{\theta}f_t(\theta_{t-1})
    • else
      • g_t\leftarrow \bigtriangledown_{\theta}f_t(\theta_{t-1})
    • if \lambda \neq 0
      • g_t \leftarrow g_t+\lambda \theta_{t-1}
    • m_t \leftarrow \beta_1m_{t-1}+(1-\beta_1)g_t
    • v_t\leftarrow\beta_2v_{t-1}+(1-\beta_2)g_t^2
    • \widehat{m_t}\leftarrow m_t/(1-\beta_1^t)
    • \widehat{v_t}\leftarrow v_t/(1-\beta_2^t)
    • if amsgrad
      • \widehat{v_t}^{max}\leftarrow max(\widehat{v_t}^{max},\widehat{v_t})
      • \theta_t\leftarrow \theta_{t-1}-\gamma\widehat{m_t}/(\sqrt{\widehat{v_t}^{max}}+\epsilon)
    • else
      • \theta_t\leftarrow \theta_{t-1}-\gamma\widehat{m_t}/(\sqrt{\widehat{v_t}}+\epsilon)
  • return \theta_t

参数

  • params(iterable)-- 可迭代的优化参数或者定义参数组的字典;
  • lr(float,Tensor,optional)---学习率(默认1e-3),张量LR还没有被所有的算法实现所支持;如果没有指定fused为True或者capturable为True的情况下请使用一个浮点型LR;
  • betas(Tuple[float,float],optional)---用于计算运行中的梯度均值和他的平方的系数,默认为(0.9,0.999);
  • eps(float,optional)---加和到分母上的项以提高数值稳定性(默认为1e-8);
  • weight_decay(float,optional)---权重衰减(L2惩罚)(默认0);
  • amsgrad(bool,optional)---该算法是否使用AMSGrad变量;
  • foreach(bool,optional)---是否使用foreach实现的优化器;如果未设置,在CUDA上将使用foreach的实现而不是for-loop的实现,因为foreach的实现具有更优化的性能;注意由于张量列表而不是张量的原因,foreach的实现较for-loop实现使用更多的峰值内存;如果内存被限制,优化器一次批处理更少的参数或者将此项设置为False(默认为None);
  • maximize(bool,optional)---最大化相对于参数的目标而不是最小化(默认:False);
  • capturable(bool,optional)---在CUDA图中捕捉此实例是否安全,设置为True可以损坏未绘图的性能,所以如果不打算图形捕捉实例,将其设置为False(默认为False);
  • differentiable(bool,optional)---训练中,优化器迭代步中是否自动梯度,如果不使用,在上下文中step()函数以torch.no_grad()运行;设置为True可能损害性能,因此在训练中如果不想使用自动梯度,将其设置为False(默认False);
  • fused(bool,optional)---是否使用fused实现(仅支持CUDA),当前torch.float64,torch.float32,torch.float16,torch.bfloat16被支持(默认None);
  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值