首页 > 其他分享 >MegEngine 使用小技巧:使用 Optimizer 优化参数

MegEngine 使用小技巧:使用 Optimizer 优化参数

时间:2023-04-13 15:33:08浏览次数:46  
标签:Optimizer 梯度 参数 MegEngine 使用 model 优化

神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为优化(optimization)。而由于参数空间复杂、参数数量庞大等原因,使得神经网络的优化问题非常难。

MegEngine 的 optimizer 模块中实现了大量的优化算法, 其中 Optimizer 是所有优化器的抽象基类,规定了必须提供的接口。 同时为用户提供了包括 SGD, Adam 在内的常见优化器实现。 这些优化器能够基于参数的梯度信息,按照算法所定义的策略对参数执行更新。

以 SGD 优化器为例,优化神经网络模型参数的基本流程如下:

from megengine.autodiff import GradManager
import megengine.optimizer as optim
 
model = MyModel()
gm = GradManager().attach(model.parameters())
optimizer = optim.SGD(model.parameters(), lr=0.01)  # lr may vary with different model
 
for data, label in dataset:
    with gm:
        pred = model(data)
        loss = loss_fn(pred, label)
        gm.backward(loss)
        optimizer.step().clear_grad()
  • 我们需要构造一个优化器,并且传入需要被优化的参数 Parameter;

  • 在反向传播,计算出梯度后执行 step 方法,参数将基于梯度信息进行一次优化;

  • 通过执行 clear_grad 方法,清空参数的梯度。

为何需要手动清空梯度?

梯度管理器执行 backward 方法时, 会将当前计算所得到的梯度以累加的形式积累到原有梯度上,而不是直接做替换。 因此对于新一轮的梯度计算,通常需要将上一轮计算得到的梯度信息清空。 何时进行梯度清空是由人为控制的,这样可允许灵活进行梯度的累积。

Optimizer 构造函数中还可接受一个含有优化器默认参数的字典(如含有学习率、动量、权重衰减系数等等), 这些信息可以通过 state_dictload_state_dict 获取和加载。更多详细内容见:Optimizer 状态字典

附:

「MegEngine 使用小技巧」系列文章,重点输出 MegEngine 及周边工具的使用技巧,如有催更或投稿,欢迎联系我们哦~

技术交流 QQ 群:1029741705;Bot 微信:megengine-bot

更多 MegEngine 信息获取,您可以:查看文档GitHub 项目,或加入 MegEngine 用户交流 QQ 群:1029741705。欢迎参与 MegEngine 社区贡献,成为 Awesome MegEngineer,荣誉证书、定制礼品享不停。

标签:Optimizer,梯度,参数,MegEngine,使用,model,优化
From: https://www.cnblogs.com/megengine/p/17315006.html

相关文章

  • 【D02】Bootstrap免费精选模板推荐,附上Django中使用模板教程
    前端模板-AnchorUIKIT前言今天介绍一款制作精良、开源、免费的Bootstrap模板——AnchorUIKIT该模板使用的是Bootstrapv4版本本文将介绍如何在Django中导入该模板的静态资源包并使用介绍官方文档Anchor-afreeBootstrapUIKit(bootcss.com)预览官方文档......
  • 在LINQPad中使用FreeSql查询数据库
    如何在LINQPad中使用FreeSqlLINQPad是一款强大的C#交互式编程环境,它可以让你轻松地编写和测试C#代码片段。除了作为一个交互式编程环境,LINQPad还可以用来连接各种数据源,包括SQL数据库、NoSQL数据库、Web服务等等。此外,LINQPad还支持使用NuGet包管理器来安装和管理第三方库。有时......
  • Android开发startActivityForResult()弃用,推荐使用registerForActivityResult()方法
    SecondActivity中publicclassSecondActivityextendsAppCompatActivity{privatestaticfinalStringTAG="SecondActivity";@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);......
  • django 1.8 官方文档翻译: 3-4-3 使用基于类的视图处理表单
    使用基于类的视图处理表单表单的处理通常有3个步骤:初始的的GET(空白或预填充的表单)带有非法数据的POST(通常重新显示表单和错误信息)带有合法数据的POST(处理数据并重定向)你自己实现这些功能经常导致许多重复的样本代码(参见在视图中使用表单)。为了避免这点,Django提供一系列的通用的......
  • django 1.8 官方文档翻译: 6-6-2 如何使用WSGI 部署
    如何使用WSGI部署Django首要的部署平台是WSGI,它是PythonWeb服务器和应用的标准。Django的startproject管理命名为你设置一个简单的默认WSGI配置,你可以根据你项目的需要做调整并指定任何与WSGI兼容的应用服务器使用。Django包含以下WSGI服务器的入门文档:如何使用Apache和......
  • ubuntu使用记录(5)ubuntu20.04 切换root用户
    ubuntu20.04使用root用户登录系统以普通用户登录系统,创建root用户的密码在终端输入命令:sudopasswdroot先输入当前普通用户(如用户coco)的密码,用于提权。......
  • Qt之QTableWidget的使用
    #ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QtWidgets>#include<QDebug>#include<QJsonArray>#include<QJsonObject>#include<QJsonValue>#include<QJsonDocument>#defineTABLE_HEADER_STYLE"QHeaderVie......
  • 使用云净装win10系统
    一、准备工作:1制作pe启动U盘。2下载windowsiso镜像。3设置装系统电脑U盘启动。二、安装系统:1插入U盘,重启电脑。2进入PE系统。3安装系统,等待重启。 1制作pe启动U盘。需要一个8GB以上的U盘,正常运行的系统并下载云净装机。云净装机,使用百度搜索下就有了,......
  • .NetCore(.NET6)中使用swagger和swagger版本控制
    原文:.NetCore(.NET6)中使用swagger和swagger版本控制目录一、.NET6中使用swagger二、.NET6中使用swagger版本控制 回到顶部一、.NET6中使用swagger swagger支持API自动生成同步的在线文档,下面在.NET6中引入1.建.NET6应用并建以下控制器///<summary>///......
  • C#中使用自动化测试代码
    转载自:https://blog.csdn.net/yangyong1250/article/details/128892399......