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

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

时间:2023-04-13 16:47:11浏览次数:46  
标签:Optimizer 梯度 参数 MegEngine 使用 optimizer 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 及周边工具的使用技巧,如有催更或投稿,欢迎联系我们哦~

标签:Optimizer,梯度,参数,MegEngine,使用,optimizer,model,优化
From: https://blog.51cto.com/u_15847528/6188120

相关文章

  • uniapp 使用cli模式,利用jenkins远程部署
    1、uniapp必须使用cli模式,如果是hbuliderx创建的,不支持2、jenkins配置需要publishoverssh插件和node插件,自行百度即可现在主要说说配置1)、系统管理-》系统配置中,找到publishoverssh 2          ......
  • Vue之插件的使用
    目录作用使用定义全局变量作用vue的插件的作用就是为了增强Vue,比如router,比如Vuex本质就是包含install方法的一个对象,install的第一个参数是vue,第二个及之后的参数是使用都要传递的数据,插件对象中的install方法会被vue自动调用。使用在Vue项目的src目录中创建目录plugi......
  • taro3.6.4 在H5 端使用 tabBar 出现bug --- taro Cannot read properties of undefi
    taro3.6.4在H5端使用tabBar出现bug解决办法就是换版本3.6.2好像没有这个问题已经有人反馈了,https://github.com/NervJS/taro/issues/13581taroCannotreadpropertiesofundefined(reading'list')......
  • 百度翻译接口的获取与使用方法
      本文介绍获取百度翻译官方接口及其密钥,并将接口授权给自己或他人开发的软件或插件的方法。  首先,打开百度翻译开放平台网站,首先点击右上角进行登录。  登录后,选择“管理控制台”。  首次进入“管理控制台”,需要首先注册为百度翻译的开发者身份。在这里,我们选择“个......
  • 关于使用硬件接口卡及CANoe软件的常见问题和解决方案
    CANoe是德国Vector公司出的一款总线开发环境,是网络和ECU开发、测试和分析的专业工具,支持从需求分析到系统实现的整个系统开发过程。硬件接口卡可以提供移动和固定的CAN,LIN,Ethernet等网络的开发、仿真、测试及维护,具有高性能、容易使用、适应性强的硬件接口,用来搭配CANoe的使用,拓展......
  • 七天玩转Redis | 打卡第三天 使用Redis的地理位置、基数统计、位图场景
    今天学习的内容今天学习了Redis在地理位置、基数统计、位图场景上的使用今天的收获今天的收获,了解了Redis在另外几个场景下的应用,比如说地理位置长的应用,在以前我只知道用一些特殊的api来计算距离,没想到Redis还提供这样的服务,这样可以省去调用一些api来计算,可以直接将要计......
  • 使用MultipartFile遇到的坑
    java使用MultipartFile上传文件时,转换流的时候,遇到java.io.ByteArrayInputStreamcannotbecasttojava.io.FileInputStream错误FileInputStreamfileInputStream=(FileInputStream)file.getInputStream();正常情况下应该返回FileInputStream,但我遇到返回ByteArrayInpu......
  • tinymix使用 嵌入式linux tinyplay控制音频
    tinymix控制声音大小使用方法使用字符方式保险  tinymix"LINEOUTvolume""2"有的是输入int但是此处输入输入int时,不行,使用字符串输入可以正常修改 输入tinymix查看选项和使用方法 root@/test_utils/alsa#tinymixMixername:'audiocodec'Numberofcontrols:......
  • 使用vue ui命令创建vue项目
    使用vueui创建项目时的几个选项1、什么是vueuivue3相比vue2多了一个创建项目的方式,那就是使用vueui的命令方式创建项目。vueui的实质就是使用vue官方图形化项目管理工具2、如何使用vueui创建vue项目或者直接选择第二个使用vue3的默认选项,我在这里介绍手动配置2.1......
  • MegEngine 使用小技巧:使用 Optimizer 优化参数
    神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题,解决这个问题的过程称为优化(optimization)。而由于参数空间复杂、参数数量庞大等原因,使得神经网络的优化问题非常难。MegEngine的optimizer模块中实现了大量的优化算法,其中Optimizer是所有......