'''
算法: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. 数字信号处理MATLAB简单序列

    数字信号处理应用的几个基本序列: 1 单位样本序列 function mainImseq() clc clear disp('生成抽样序列'); y=imseq(,,); %调用样本函数,此时序列下标 ...

  2. 读书笔记 effective c++ Item 16 成对使用new和delete时要用相同的形式

    1. 一个错误释放内存的例子 下面的场景会有什么错? std::]; ... delete stringArray 一切看上去都是有序的.new匹配了一个delete.但有一些地方确实是错了.程序的行 ...

  3. C++/C语言程序代码

    //-----------------------------------1 #include <stdio.h> #include<stdlib.h> void main() ...

  4. ES(二): Build ES Cluster on Azure VM

    目录: 系统环境准备 安装ES集群 安装Kibana 安装x-pack 安装head 系统环境准备 参见: HDP2.4安装(二):Centos7配置 修改network: 修改hosts: 配置ss ...

  5. Eclipse中debug调试java代码一直报Source not found的解决办法

    今天使用eclipse的debug调试代码,一直没法正常调试,一按F6就提示Source not found 根据提示发现可能是另一个项目影响了,所以把另一个项目Close Project,这次直接t ...

  6. Pangolin的使用

    Pangolin 是一个可用于SLAM可视化的openGL库.目前有很多SLAM系统都用它作为可视化的工具.它的编译与安装过程问题不大,依赖也比较少.但最近我在单独使用它的时候,碰到了很奇怪的现象:我 ...

  7. MD5算法学习整理

    一路学来 记得笔记不少 但是给自己看 当时就记得很随意 以为后面都懂 但还是太单纯了,现在回顾 自己都完全看不下去,所以以后的都放的博客上,让自己看懂,让感兴趣的看懂,详细,暴力 不废话了 MD5算法 ...

  8. 每天一个Linux命令(05)--rm命令

    自从学会了用mkdir创建目录之后,整个系统里就只能看到一堆空目录了,囧~ 那么今天我们来学一下如何清理这些空目录吧--rm命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录 ...

  9. [干货来袭]C#7.0新特性(VS2017可用)

    前言 微软昨天发布了新的VS 2017 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下其实2016年12月就已经公布了的C#7 ...

  10. webots自学笔记(一)软件界面和简单模型仿真

    本人是某非理工类某高校大四狗,由于毕设研究需要使用webots软件,在学习使用webots的过程花费了很多时间.由于这个软件基本没有什么中文资料,所以想把自己所学到的一些东西写下来,如有什么错误的地方 ...