'''
算法:lms学习率的退火算法
解决的问题:学习率不变化,收敛速度较慢的情况
思路:由初始解和控制参数初值开始,对当前解重复进行"产生新解-->计算目标函数差-->
接受或舍弃"的迭代,并逐步衰减控制参数,算法终结时的当前解即为所得近似最优解
''' '''
变量约定:大写表示矩阵或数组,小写表示数字
X:表示数组或者矩阵
x:表示对应数组或矩阵的某个值
''' import numpy as np
import math
a0=0.1 ##学习率初始值 <a<
a=0.0 ##学习率变量
r=0.2 ##可调参数,改善退火曲线的形态
X=np.array([[,,],[,,],[,,],[,,]]) ##输入矩阵
D=np.array([,,-,-]) ##期望输出结果矩阵
W=np.array([,,]) ##权重向量
expect_e=0.005 ##期望误差
maxtrycount= ##最大尝试次数
cnt= ##当前循环次数 ##硬限幅函数(即标准,这个比较简单:输入v大于0,返回1.小于等于0返回-) def sgn(v):
if v>:
return
else:
return - ##读取实际输出
'''
这里是两个向量相乘,对应的数学公式:
a(m,n)*b(p,q)=m*p+n*q
在下面的函数中,当循环中xn=1时(此时W=([0.1,0.1])):
np.dot(W.T,x)=(,)*(0.1,0.1)=*0.1+*0.1=0.2> ==>sgn 返回1
'''
def get_v(W,x):
return sgn(np.dot(W.T,x))##dot表示两个矩阵相乘 ##读取误差值
def get_e(W,x,d):
return d-get_v(W,x) ##权重计算函数(批量修正)
'''
对应数学公式: w(n+)=w(n)+a*x(n)*e
对应下列变量的解释:
w(n+) <= neww 的返回值
w(n) <=oldw(旧的权重向量)
a <= a(学习率,范围:<a<)
x(n) <= x(输入值)
e <= 误差值或者误差信号
''' '''
核心:学习率的计算(有多种退火方式,这里选取其中一个)
对应的数学公式:(非标准数学符号)
m(n)=m0/(+n/t)
参数解释:
m(n) <= 当前学习率(或者初始解)
m0 <= 学习率初始值(也叫控制参数)
n <= 循环次数
t <= 可调参数,改善退火曲线的形态 '''
def neww(oldW,d,x):
e=get_e(oldW,x,d)
#a=a0/(+float(cnt)/r)
a=a0/(+float(cnt)*r)
w=oldW+a*x*e
return (w,e) ##修正权值
'''
此循环的原理:
权值修正原理(批量修正)==>神经网络每次读入一个样本,进行修正,
达到预期误差值或者最大尝试次数结束,修正过程结束
''' while True:
err=
i=
for xn in X:
W,e=neww(W,D[i],xn)
i+=
err+=pow(e,) ##lms算法的核心步骤,即:MES
err=math.sqrt(err) ##与lms算法有区别的地方,求开方最小
cnt+=
print(u"第 %d 次调整后的权值:"%cnt)
print(W)
print(u"误差:%f"%err)
if err<expect_e or cnt>=maxtrycount:
break print("最后的权值:",W.T) ##输出结果
print("开始验证结果...")
for xn in X:
print("D%s and W%s =>%d"%(xn,W.T,get_v(W,xn))) ##测试准确性: print("开始测试...")
test=np.array([,,])
print("D%s and W%s =>%d"%(test,W.T,get_v(W,test)))
test=np.array([,,])
print("D%s and W%s =>%d"%(test,W.T,get_v(W,test)))

输出结果:

第 1 次调整后的权值:
[ 0.8 -0.6 -1.8]
误差:2.000000
第 2 次调整后的权值:
[ 0.96666667 -0.6 -0.3 ]
误差:3.464102
第 3 次调整后的权值:
[ 0.96666667 -0.88571429 -0.72857143]
误差:2.828427
第 4 次调整后的权值:
[ 0.96666667 -1.88571429 -2.60357143]
误差:4.000000
第 5 次调整后的权值:
[ 1.18888889 -1.55238095 -0.60357143]
误差:2.828427
第 6 次调整后的权值:
[ 1.28888889 -1.55238095 0.29642857]
误差:3.464102
第 7 次调整后的权值:
[ 1.28888889 -1.55238095 0.29642857]
误差:0.000000
最后的权值: [ 1.28888889 -1.55238095 0.29642857]
开始验证结果...

这次调整r值的结果是7次训练得出最优解,同样的数据用固定学习率的lms算法要8次训练。在调整r值的实验中,最快的一次是2次得出最优解。

机器学习:Python实现lms中的学习率的退火算法的更多相关文章

  1. 机器学习:Python实现最小均方算法(lms)

    lms算法跟Rosenblatt感知器相比,主要区别就是权值修正方法不一样.lms采用的是批量修正算法,Rosenblatt感知器使用的 是单样本修正算法.两种算法都是单层感知器,也只适用于线性可分的 ...

  2. 机器学习---python环境搭建

    一 安装python2.7 去https://www.python.org/downloads/ 下载,然后点击安装,记得记住你的安装路径,然后去设置环境变量,这些自行百度一下就好了. 由于2.7没有 ...

  3. 机器学习:R语言中如何使用最小二乘法

    详细内容见上一篇文章:http://www.cnblogs.com/lc1217/p/6514734.html 这里只是介绍下R语言中如何使用最小二乘法解决一次函数的线性回归问题. 代码如下:(数据同 ...

  4. 机器学习-Python 01

    机器学习中最常用最流行的语言工具现阶段应该是Python, 这篇文章主要介绍一些常用的Python语法知识.本篇博文适合那些有其他语言基础的程序员们,如果一点基础都没有,我建议先跳过.博主以前是做移动 ...

  5. pytorch中的学习率调整函数

    参考:https://pytorch.org/docs/master/optim.html#how-to-adjust-learning-rate torch.optim.lr_scheduler提供 ...

  6. 在学习python的过程中,遇到的最大的困难是什么?

    本人文科生,回顾自己近 2 年的Python 自学经历,有一些学习心得和避坑经验分享给大家,让大家在学习 Python 的过程中少走一些弯路!减少遇到不必要的学习困难! 首先,最开始最大的困难应该就是 ...

  7. 使用Python将Excel中的数据导入到MySQL

    使用Python将Excel中的数据导入到MySQL 工具 Python 2.7 xlrd MySQLdb 安装 Python 对于不同的系统安装方式不同,Windows平台有exe安装包,Ubunt ...

  8. 【python】类中的self

    在python的类中,经常会写self,代表对象自己.如下例: #coding=utf-8 class Foo: def __init__(self, name): self.name = name ...

  9. paip.编程语言方法重载实现的原理及python,php,js中实现方法重载

    paip.编程语言方法重载实现的原理及python,php,js中实现方法重载 有些语言,在方法的重载上,形式上不支持函数重载,但可以通过模拟实现.. 主要原理:根据参数个数进行重载,或者使用默认值 ...

随机推荐

  1. C++ 头文件系列(sstream)

    1. 简介 这个头文件主要定义了基于字符串类(string类)的流的4个模版: basic_stringbuf basic_istringstream basic_ostringstream basi ...

  2. HAProxy实战

    实验目的 测试基于haproxy的反代和负载均衡配置 测试keepalived高可用haproxy的效果 实验要点 (1) 动静分离discuzx,动静都要基于负载均衡实现: (2) 进一步测试在ha ...

  3. SVN服务搭建

    yum方式搭建: 1,安装SVN服务端 直接用apt-get或yum安装subversion即可(当然也可以自己去官方下载安装) sudo apt-get install subversion 2,创 ...

  4. JS中的类,类的继承方法

    大牛请无视此篇! 首先我们定义一个类,方法很简单,就像我们定义函数一样,只不过我们为了与函数区分,名称首字母要大写,看代码: function Person (){ } 这就是一个很简单的Poson类 ...

  5. 一个简单的php站点配置

    一个简单的php站点配置   现在我们来看在一个典型的,简单的PHP站点中,nginx怎样为一个请求选择location来处理:   server {     listen      80;     ...

  6. 搭建hibernate环境

    Hibernate概述什么是框架1 写程序,使用框架之后,帮我们实现一部分功能,使用框架好处,少写一部分代码实现功能 什么是hibernate框架(重点)1 hibernate框架应用在javaee三 ...

  7. 关于Dapper.NET的相关论述

    年少时,为何不为自己的梦想去拼搏一次呢?纵使头破血流,也不悔有那年少轻狂.感慨很多,最近事情也很多,博客也很少更新了,毕竟每个人都需要为自己的生活去努力. 最近在一个群里遇到一个人说的话,在这里不再赘 ...

  8. java线程学习(二)

    多个线程并发抢占资源是,就会存在线程并发问题,造成实际资源与预期不符合的情况.这个时候需要设置"资源互斥". 1.创建资源,这个地方我创建了一个资源对象threadResource ...

  9. 调试时a标签禁止跳转方法

    a.setAttribute("onclick",'');

  10. ThinkPhp知识大全(非常详细)

    php框架 一.真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格 ...