梯度下降是模型优化常用方法,原理也比较简单,简言之就是参数沿负梯度方向更新,参数更新公式如下。

,其中
表示的是步长,用于控制每次更新移动的步伐。

我们将使用pytorch来试验下这个方法。

首先先生成模拟数据。

x1 

目标模型表达式,需要优化的参数为

初始化需要优化的参数

w1 

损失函数使用平方损失

平方损失的梯度计算比较简单,根据链式法则,容易计算

因此梯度更新函数如下,

def 

使用随机梯度下降法,对每一个样本计算梯度,并更新参数

def 

初始使用lr = 0.001发现,w1和w2并没有拟合到预期的值。做出的图显示,loss没有拟合的趋势,提示我们选择的学习率过大,导致难以拟合。

Learing Rate = 0.001

调整学习率到0.0001之后,结果拟合的很好,w1和w2的值也和预期一致。

Learning Rate = 0.0001

以上就是使用SGD的基本流程,不过上述步骤pytorch都帮我们封装好了,不需要这么麻烦,下面是pytorch的自动求导版本。

首先是几个概念。

optim(优化器)

pytorch已经封装好了很多常用的优化器,可调用step成员函数来对参数进行更新。

常用优化器的包括:SGD, Adam, Adagrad, Rprop。

backward(方向传播)

自动梯度计算,省了很大麻烦!

backward函数会根据Variable的成员变量requires_grad来觉得是否需要对该变量计算梯度。

计算完的梯度保存在成员变量grad中。

注意: backward计算的梯度不会自动清零,而是累加到上一次的梯度中,所以每次更新参数,都需要对梯度清零一次。

有两种方式:

  1. 调用optim的zero_grad函数
  2. 手动对变量梯度清零. 例:w1.grad.data.zero_()

以下就是简易版本。

def 

下篇文章介绍下常用的优化器~

pytorch .item_pytorch + SGD相关推荐

  1. pytorch optim.SGD

    1.应用 import torch import torch.nn as nnoptimizer = torch.optim.SGD(model.parameters(), lr=0.1, momen ...

  2. pytorch中SGD源码解读

    调用方法: torch.optim.SGD(params, lr=<required parameter>, momentum=0, dampening=0, weight_decay=0 ...

  3. 基于Pytorch源码对SGD、momentum、Nesterov学习

    目前神经网络的监督学习过程通常为: 数据加载(load)进神经网络 经过网络参数对数据的计算,得出预测值(predict) 根据预测值与标注值(label)之间的差距,产生损失(loss) 通过反向传 ...

  4. Pytorch optimizer.step() 和loss.backward()和scheduler.step()的关系与区别

    参考   Pytorch optimizer.step() 和loss.backward()和scheduler.step()的关系与区别 - 云+社区 - 腾讯云 首先需要明确optimzier优化 ...

  5. 莫烦pytorch学习之问题记录与总结

    目录 一.三分类问题 二.创建网络结构部分,还有另一种形式,如下: 三.pytorch中save_model和load_model: 四.batch批量数据读取 五.pytorch测试SGD.Mome ...

  6. 构建一个增量推荐系统

    2020-04-18 10:06:17 作者:Dimitris Poulopoulos 编译:ronghuaiyang 导读 推荐系统应该要可以适应发生的变化. 需求或先决条件 虽然我会尽量少用数学术 ...

  7. torch之optimizer.step() 和loss.backward()和scheduler.step()的关系与区别

    torch之optimizer.step() 和loss.backward()和scheduler.step()的关系与区别 由于接触torch时间不久,所有对此比较困惑,遇到如下博文解释十分详细,故 ...

  8. 一种崭新的长尾分布下分类问题的通用算法|NeurIPS 2020

    ↑ 点击蓝字 关注视学算法 作者丨汤凯华@知乎 来源丨https://zhuanlan.zhihu.com/p/259569655 编辑丨极市平台 本文主要介绍我们组今年被NeurIPS 2020接收 ...

  9. 深度学习推荐系统综述

    本周学习情况 学习内容概述: 学习了FM与深度学习结合的相关模型 学习了注意力机制与深度学习结合的相关模型 学习了强化学习与深度学习结合的相关模型 对学习的模型进行归纳总结以便以后复习查看 使用Pyt ...

最新文章

  1. C语言实现将彩色bmp图像转化为灰图、灰度图像反色
  2. 一位数据挖掘成功人士给数据挖掘在读研究生的建议
  3. 面试官:哪些场景会产生OOM?怎么解决?
  4. 产品打包工具的制作,ant,编译源码,打jar包,打tag,打war包,备份release版本等...
  5. python 解析XML xml.dom
  6. mockito_Mockito:为什么您仍然应该欣赏InjectMocks注释
  7. PostgreSQL在何处处理 sql查询之三十八
  8. python最长匹配_二分图最大匹配:匈牙利算法的python实现
  9. win10树莓派改ip_在树莓派2上安装 Windows 10
  10. 文件管理器 Root Explorer v2.9.4 零售完全版
  11. 9_林业专题图的制作
  12. 蓝牙芯片技术原理详解
  13. 多示例论文泛读:Revisiting Multiple Instance Neural Networks (2016 mi-Net MI-Net)
  14. 浏览器地址栏中文乱码问题
  15. smith 图中Q值和阻抗匹配
  16. 手机屏幕坏了怎么把数据导出来_苹果手机的语音备忘录怎么导出来?
  17. 整理的遥感期刊,SCI检索,3/4区居多
  18. 座席成功所需的 5 项数字客户服务技能
  19. 分页第一页用0还是1_计算机用0 和1刻画文字、图片和声音
  20. 组态软件开发工程的一般步骤

热门文章

  1. 苏炳添招研究生了!上课画面曝光,网友:千万不要逃课……
  2. 剑桥大学:机器学习模型部署都有哪些坑?
  3. 无人机航拍记录生活真爽,包邮送一个!
  4. 南开校长曹雪涛团队12篇论文被调查“可信性”,此前被举报实验图片有PS痕迹...
  5. Python 官方报告:哪些库最受欢迎、PyCharm 比 VScode更香?
  6. 北大数学天才毕业后坚持出家:理想现实间的挣扎
  7. CSS盒子模型(border、padding、margin、圆角边框、盒子阴影、文字阴影、新闻列表综合案例、新浪导航栏案例)
  8. python进程执行带有参数的任务(args、kwargs)
  9. 菜鸡记录-王爽-汇编语言-实验十(编写子程序-显示字符串)
  10. CNN模型之MobileNet