推广 热搜: page  数据  小红  红书  考试  论文  数据分析  关键词  哪些  搜索 

pytorch源码解析1——torch.optim:优化算法接口详解

   日期:2024-12-30     移动:https://sicmodule.kub2b.com/mobile/quote/16843.html

1.0 基本用法

  • 优化器主要是在模型训练阶段对模型可学习参数进行更新, 常用优化器有 SGD,RMSprop,Adam等
  • 优化器初始化时传入传入模型的可学习参数,以及其他超参数如 ,等
  • 在训练过程中先调用  清空梯度,再调用  反向传播,最后调用 更新模型参数

pytorch源码解析1——torch.optim:优化算法接口详解

简单使用示例如下所示

 

1.1 PyTorch 中的优化器

所有优化器都是继承父类 ,如下列表是 PyTorch 提供的优化器:

  • SGD
  • ASGD
  • Adadelta
  • Adagrad
  • Adam
  • AdamW
  • Adamax
  • SparseAdam
  • RMSprop
  • Rprop
  • LBFGS

1.2 父类Optimizer 基本原理

 是所有优化器的父类,它主要有如下公共方法:

  • add_param_group(param_group): 添加模型可学习参数组
  • step(closure): 进行一次参数更新
  • zero_grad(): 清空上次迭代记录的梯度信息
  • state_dict(): 返回 dict 结构的参数状态
  • load_state_dict(state_dict): 加载 dict 结构的参数状态

1.2.1 初始化 Optimizer

初始化优化器只需要将模型的可学习参数(params)和超参数(defaults)分别传入优化器的构造函数,下面是的初始化函数核心代码:

 

1.2.2 add_param_group

该方法在初始化函数中用到,主要用来向 添加不同分组的模型参数

 

利用 add_param_group 函数功能,可以对模型不同的可学习参数组设定不同的超参数,初始化优化器可传入元素是 dict 的 list,每个 dict 中的 key 是  或者其他超参数的名字如 ,下面是一个实用的例子:对模型的层参数设置不同的学习率

 

1.2.3 step

此方法主要完成一次模型参数的更新

  • 基类  定义了 step 方法接口,如下所示
 
  • 子类如 SGD 需要实现 step 方法,如下所示:
 
  • step 方法可传入闭包函数 closure,主要目的是为了实现如和等优化算法,这些算法需要对模型进行多次评估
  • Python 中闭包概念:在一个内部函数中,对外部作用域的变量进行引用(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包

下面是 closure 的简单示例:

 

1.2.4 zero_grad

  • 在反向传播计算梯度之前对上一次迭代时记录的梯度清零,参数 设置为  时会直接将参数梯度设置为 ,从而减小内存使用, 但通常情况下不建议设置这个参数,因为梯度设置为  和  在 PyTorch 中处理逻辑会不一样。
 

1.2.5 state_dict() 和 load_state_dict

这两个方法实现序列化和反序列化功能。

  • state_dict(): 将优化器管理的参数和其状态信息以 dict 形式返回
  • load_state_dict(state_dict): 加载之前返回的 dict,更新参数和其状态
  • 两个方法可用来实现模型训练中断后继续训练功能
本文地址:https://sicmodule.kub2b.com/quote/16843.html     企库往 https://sicmodule.kub2b.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号