Momentum方法可以说是对SGD的进一步优化,细节可以参考这里

这里用python对其进行简单实现,如下:

  1. # coding=utf-8
  2. """
  3. 基于小批量梯度下降来实现的Momentum(动量)
  4. 参考:https://blog.csdn.net/bvl10101111/article/details/72615621
  5. 作用:
  6. 在学习率较小的时候,适当的momentum能够起到一个加速收敛速度的作用;
  7. 在学习率较大的时候,适当的momentum能够起到一个减小收敛时震荡幅度的作用.
  8. @author: Reynold
  9. @date: 2018-08-21
  10. """
  11. import numpy as np
  12. import random
  13.  
  14. # 构造训练数据
  15. x = np.arange(0., 10., 0.2)
  16. m = len(x)
  17. x0 = np.full(m, 1.0)
  18. input_data = np.vstack([x0, x]).T # 将偏置b作为权向量的第一个分量
  19. target_data = 3 * x + 8 + np.random.randn(m)
  20.  
  21. # 两种终止条件
  22. max_iter = 10000
  23. epsilon = 1e-5
  24.  
  25. # 初始化权值
  26. np.random.seed(0)
  27. w = np.random.randn(2)
  28. v = np.zeros(2) # 更新的速度参数
  29.  
  30. alpha = 0.001 # 步长
  31. diff = 0.
  32. error = np.zeros(2)
  33. count = 0 # 循环次数
  34.  
  35. eps = 0.9 # 衰减力度,可以用来调节,该值越大那么之前的梯度对现在方向的影响也越大
  36.  
  37. while count < max_iter:
  38. count += 1
  39.  
  40. sum_m = np.zeros(2)
  41. index = random.sample(range(m), int(np.ceil(m * 0.2)))
  42. sample_data = input_data[index]
  43. sample_target = target_data[index]
  44.  
  45. for i in range(len(sample_data)):
  46. dif = (np.dot(w, input_data[i]) - target_data[i]) * input_data[i]
  47. sum_m = sum_m + dif
  48. v = eps * v - alpha * sum_m # 在这里进行速度更新
  49. w = w + v # 使用动量来更新参数
  50.  
  51. if np.linalg.norm(w - error) < epsilon:
  52. break
  53. else:
  54. error = w
  55. print 'loop count = %d' % count, '\tw:[%f, %f]' % (w[0], w[1])

同样的收敛条件,速度确实比MBGD要快,用的次数更少

结果:

  1. loop count = 432 w:[8.285241, 3.150939]

Momentum(动量)方法的python实现的更多相关文章

  1. 深度学习Momentum(动量方法)

    转自:http://blog.csdn.net/bvl10101111/article/details/72615621 先上结论: 1.动量方法主要是为了解决Hessian矩阵病态条件问题(直观上讲 ...

  2. 在代理中托管特殊方法的python代码实现

    任务简单的介绍是: 在新风格对象模型中,Python操作其实是在类中查找特殊方法的(经典对象是在实例中进行操作的),现在需要将一些新风格的实例包装到代理中,,此代理可以选择将一些特殊的方法委托给内部的 ...

  3. Python中xlrd和xlwt模块使用方法 (python对excel文件的操作)

    本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...

  4. 两种方法实现Python二分查找算法

    两种方法实现Python二分查找算法   一. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 arr=[1,3,6,9,10,20,30] def findnumber( ...

  5. 自动化测试常用断言的使用方法(python+selenium)

    自动化测试常用断言的使用方法(python) 自动化测试中寻找元素并进行操作,如果在元素好找的情况下,相信大家都可以较熟练地编写用例脚本了,但光进行操作可能还不够,有时候也需要对预期结果进行判断. 这 ...

  6. 魔法方法推开Python进阶学习大门

    热爱Python Python是Guido van Rossum设计出来的让使用者觉得如沐春风的一门编程语言.2020年11月12日,64岁的Python之父宣布由于退休生活太无聊,自己决定加入Mic ...

  7. Nesterov方法的python实现

    牛顿动量法,相比于上一篇Momentum,不一样的地方是应用了临时更新 这里用python对其进行简单实现,如下: # coding=utf-8 """ 基于小批量梯度下 ...

  8. LPTHW 笨方法学习python 16章

    根据16章的内容作了一些扩展. 比如,判断文件如果存在,就在文件后追加,如不存在则创建. 同时借鉴了shell命令中类似 cat <<EOF > test的方法,提示用户输入一个结尾 ...

  9. Web Driver 8中定位方法 ——基于python语言

    WebDriver提供了八种元素定位方法,在python 语言中,方法如下:  id定位:find_element_by_id("id值"):id属性是唯一的.  1 driver ...

随机推荐

  1. 计算机网络(1): http原理和uuid

    http 的请求报文和响应报文格式 请求报文有哪些方法 一个典型的http报文 状态码有哪几种 以及短语是用来解释状态码的 接口测试中,需要使用到UUID,用来生成唯一ID. 1.什么是UUID UU ...

  2. 刷题46. Permutations

    一.题目说明 题目是46. Permutations,给一组各不相同的数,求其所有的排列组合.难度是Medium 二.我的解答 这个题目,前面遇到过类似的.回溯法(树的深度优先算法),或者根据如下求解 ...

  3. composer命令卡慢,使用国内源

    执行composer install.update 和require的时候,遇到卡住不动的情况,可以切换到国内阿里云的源 composer config -g repo.packagist compo ...

  4. 网页嵌 activeXForm 中显示fastReport

  5. Runtime之方法交换

    在没有一个类的实现源码的情况下,想改变其中一个方法的实现,除了继承它重写.和借助类别重名方法暴力抢先之外,还有就是方法交换 方法交换的原理:在OC中调用一个方法其实是向一个对象发送消息,查找消息的唯一 ...

  6. 游戏引擎UE4详解!

    UE4 的全名是 Unreal Engine 4,中文译为“虚幻引擎4”.UE4 是一款由 Epic Games 公司开发的开源.商业收费.学习免费的游戏引擎.那你了解UE4吗?如果还不清楚,就一起来 ...

  7. 微信小程序之组件常见的问题

    小程序自定义的组件: (1)组件的结构 自定义的组件和普通的页面定义没有什么区别,也包含了四个文件:xxx.wxml(组件的视图层),xxx.json,xxx.js,xxx.wxss 组件的xxx.w ...

  8. SQL游标的介绍与使用举例

    一.游标的定义 declare (游标名) [INSENSITIVE] [SCROLL] CURSOR FOR select_statement [FOR{READ ONLY|UPDATE[OF co ...

  9. 01 语言基础+高级:1-6 集合_day03【List、Set、Collections工具类】

    day03 [List.Set.数据结构.Collections] 主要内容 数据结构 List集合 Set集合 Collections 第一章 数据结构 2.1 数据结构有什么用 我们将常见的数据结 ...

  10. 用c语言实现的几个小项目

    1.参考:Linux系统编程 2.参考:制作简单计算器 3.参考:制作2048小游戏 4.参考:五子棋实现