Nesterov方法的python实现
牛顿动量法,相比于上一篇Momentum,不一样的地方是应用了临时更新
这里用python对其进行简单实现,如下:
# coding=utf-8
"""
基于小批量梯度下降来实现的Nesterov
参考:https://blog.csdn.net/bvl10101111/article/details/72615961
相比于上一篇的Momentum,不一样的地方是应用了临时更新
@author: Reynold
@date: 2018-08-21
"""
import numpy as np
import random # 构造训练数据
x = np.arange(0., 10., 0.2)
m = len(x)
x0 = np.full(m, 1.0)
input_data = np.vstack([x0, x]).T # 将偏置b作为权向量的第一个分量
target_data = 3 * x + 8 + np.random.randn(m) # 两种终止条件
max_iter = 10000
epsilon = 1e-5 # 初始化权值
np.random.seed(0)
w = np.random.randn(2)
v = np.zeros(2) # 更新的速度参数 alpha = 0.001 # 步长
diff = 0.
error = np.zeros(2)
count = 0 # 循环次数 eps = 0.9 # 衰减力度,可以用来调节,该值越大那么之前的梯度对现在方向的影响也越大 while count < max_iter:
count += 1 sum_m = np.zeros(2)
index = random.sample(range(m), int(np.ceil(m * 0.2)))
sample_data = input_data[index]
sample_target = target_data[index] # 应用临时更新,先更新一下参数w的值
tmp_w = w + eps * v
for i in range(len(sample_data)):
dif = (np.dot(tmp_w, input_data[i]) - target_data[i]) * input_data[i]
sum_m = sum_m + dif
v = eps * v - alpha * sum_m # 在这里进行速度更新
w = w + v # 使用动量来更新参数 if np.linalg.norm(w - error) < epsilon:
break
else:
error = w
print 'loop count = %d' % count, '\tw:[%f, %f]' % (w[0], w[1])
结果,由于数据量太小,相比于Momentum提升不是很大:
loop count = 437 w:[7.930222, 3.088267]
Nesterov方法的python实现的更多相关文章
- 在代理中托管特殊方法的python代码实现
任务简单的介绍是: 在新风格对象模型中,Python操作其实是在类中查找特殊方法的(经典对象是在实例中进行操作的),现在需要将一些新风格的实例包装到代理中,,此代理可以选择将一些特殊的方法委托给内部的 ...
- Python中xlrd和xlwt模块使用方法 (python对excel文件的操作)
本文主要介绍可操作excel文件的xlrd.xlwt模块.其中xlrd模块实现对excel文件内容读取,xlwt模块实现对excel文件的写入. 安装xlrd和xlwt模块 xlrd和xlwt模块不是 ...
- 两种方法实现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( ...
- 自动化测试常用断言的使用方法(python+selenium)
自动化测试常用断言的使用方法(python) 自动化测试中寻找元素并进行操作,如果在元素好找的情况下,相信大家都可以较熟练地编写用例脚本了,但光进行操作可能还不够,有时候也需要对预期结果进行判断. 这 ...
- 魔法方法推开Python进阶学习大门
热爱Python Python是Guido van Rossum设计出来的让使用者觉得如沐春风的一门编程语言.2020年11月12日,64岁的Python之父宣布由于退休生活太无聊,自己决定加入Mic ...
- LPTHW 笨方法学习python 16章
根据16章的内容作了一些扩展. 比如,判断文件如果存在,就在文件后追加,如不存在则创建. 同时借鉴了shell命令中类似 cat <<EOF > test的方法,提示用户输入一个结尾 ...
- Web Driver 8中定位方法 ——基于python语言
WebDriver提供了八种元素定位方法,在python 语言中,方法如下: id定位:find_element_by_id("id值"):id属性是唯一的. 1 driver ...
- “笨方法”学习Python笔记(1)-Windows下的准备
Python入门书籍 来自于开源中国微信公众号推荐的一篇文章 全民Python时代,豆瓣高级工程师告诉你 Python 怎么学 问:请问你目前最好的入门书是那本?有没有和PHP或者其他语言对比讲Pyt ...
- 多种方法实现 python 线程池
最近在做一个爬虫相关的项目,单线程的整站爬虫,耗时真的不是一般的巨大,运行一次也是心累,,,所以,要想实现整站爬虫,多线程是不可避免的,那么python多线程又应该怎样实现呢?这里主要要几个问题(关于 ...
随机推荐
- MFC下的网络编程(1)CAsyncSocket进行无连接(UDP)通信
服务器端发送数据给客户端 先看服务器端: CAsyncSocket m_sockSend; //声明一个Socket对象 点击发送数据后,执行下面这些动作 ...
- GitHub上传家庭记账本
GitHub的使用参考之前的博客GitHub的初步了解和使用,并完成了相关的android个人家庭记账本的上传
- SQLite数据库以及增删改查的案例
Android使用开源的与操作系统无关的SQL数据库——SQLite 一:在命令行下创建数据库: 1.启动模拟器后,打开命令行,执行adb shell 2.进入所在工程目录 3.执行sqlite3 m ...
- eclipse JSP学习遇到的问题,获取页面中文值时出现乱码
性别:男<input type="radio" name="sex" value="男" /> String sex =requ ...
- A4纸表格打印
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 学会拒绝,是一种智慧——OO电梯章节优化框架的思考
在本章的三次作业里,每次作业我都有一个主题,分别是:托盘型共享数据.单步电梯运行优化.多部电梯运行优化,因而电梯优化实际是第二.三次作业.虽然后两次作业从性能分上看做得还不错,但阅读其他大佬博客,我深 ...
- CSS padidng-top\margin-top\fixed 的特殊性
参考: 使用css时,可能会出错的两个地方 1.padidng-top\margin-top padidng-top\margin-top可以设置'px' 或者是'%',设置'px'略过,说一下设置‘ ...
- Cobub无码埋点关键技术的实现
随着大数据时代的到来,数据采集也已经变的越来越重要.前端埋点作为一个比较成熟的数据接入手段被广泛应用着.目前埋点分为两种方式,有码与无码埋点.有码埋点比较容易理解,即调用SDK的API,在代码中插入埋 ...
- 洛谷 P2871 [USACO07DEC]手链Charm Bracelet && 01背包模板
题目传送门 解题思路: 一维解01背包,突然发现博客里没有01背包的板子,补上 AC代码: #include<cstdio> #include<iostream> using ...
- 生成随机数(Random类)和获取用户输入(Scanner类)
生成指定范围内的随机数 Math.random() 生成随机数,随机数在0到1之间,类型是 double. public class randCase { public static void mai ...