BP神经网络

function [W,err]=BPTrain(data,label,hiddenlayers,nodes,type)
%Train the bp artial nueral net work
%input data,label,layers,nodes,type
%data:dim*n
%label:1*n
%layers:m:number of hidden layers
%nodes:num_1;num_2...num_m
%type==1:create and train
%type==0:train
%tanh / 双曲正切: tanh(x) = sinh(x) / cosh(x)=[e^x - e^(-x)] / [e^x + e^(-x)]
%(tanh(x))'=sech^2(x)
%sech / 双曲正割: sech(x) = 1 / cosh(x) = 2 / [e^x + e^(-x)]
if type==1
%create the nureal network and train
nodes=[size(data,1);nodes];
nodes=[nodes+1;size(label,1)];
%W{1}=random(,nodes(1));
layers=hiddenlayers+2;
for i=1:layers-2
W{i}=rand(nodes(i),nodes(i+1)-1);
end
W{layers-1}=rand(nodes(layers-1),nodes(layers));
else
%do nothing
end
%train the bp network
%the termination condition
%iteration.error
iter=0;
error=inf;
maxiter=2000;
lr=0.1;
epision=0.1;
tic
while iter<maxiter&&error>epision
iter=iter+1;
error=0;
for k=1:size(data,2)
%forward process
y{1}=[data(:,k)];
v{1}=y{1};
for i=1:layers-1
y{i}=[1;y{i}];
v{i+1}=W{i}'*y{i};
y{i+1}=tanh(v{i+1});
end
%back process
error=error+abs(label(k)-y{layers});
delta=(label(k)-y{layers}).*((sech(v{layers}).^2));
W{layers-1}=W{layers-1}+lr.*(y{layers-1}*delta);
for i=layers-1:-1:2
delta=sech(v{i}).^2.*(W{i}(1:size(W{i},1)-1,:)*delta);
W{i-1}=W{i-1}+lr.*(y{i-1}*delta');
end
end
err(iter)=error;
error
end
toc

測试代码

function res=BPTest(W,data)
for k=1:size(data,2)
y=data(:,k);
for i=1:length(W)-1
y=[1;y];
y=tanh((W{i}'*y));
end
res(k)=tanh(W{i+1}'*[1;y]);
end
global rbf_sigma;
global rbf_center;
global rbf_weight;
if strcmp(traintype,'data')
traindist=pdist2(traindata,traindata);
rbf_sigma=max(max(traindist))/(scale.^2);%/(2*sqrt(sqrt(length(traindata))));
rbf_center=traindata;
Phi=exp(-traindist./rbf_sigma);
rbf_weight=inv(Phi)*trainlabel; else if strcmp(traintype,'cluster')
[Idx,C,sumD,D]=kmeans(traindata,K,'emptyaction','singleton');
traindist=pdist2(traindata,C);
Cdist=pdist2(C,C);
rbf_sigma=max(max(Cdist))/(scale.^2);%/(2*sqrt(sqrt(length(traindata))));
rbf_center=C;
Phi=exp(-traindist./rbf_sigma);
rbf_weight=inv(Phi'*Phi)*Phi'*trainlabel;
else if strcmp(traintype,'descend') end end
end

測试 代码

function predcict=RBFTest(data)

global rbf_sigma;
global rbf_center;
global rbf_weight; testdist=pdist2(data,rbf_center); predcict=exp(-testdist./(2*rbf_sigma))*rbf_weight;

简洁的BP及RBF神经网络代码的更多相关文章

  1. RBF神经网络

    RBF神经网络 RBF神经网络通常只有三层,即输入层.中间层和输出层.其中中间层主要计算输入x和样本矢量c(记忆样本)之间的欧式距离的Radial Basis Function (RBF)的值,输出层 ...

  2. RBF神经网络和BP神经网络的关系

    作者:李瞬生链接:https://www.zhihu.com/question/44328472/answer/128973724来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  3. RBF神经网络学习算法及与多层感知器的比较

    对于RBF神经网络的原理已经在我的博文<机器学习之径向基神经网络(RBF NN)>中介绍过,这里不再重复.今天要介绍的是常用的RBF神经网络学习算法及RBF神经网络与多层感知器网络的对比. ...

  4. RBF神经网络的matlab简单实现

    径向基神经网络 1.径向基函数 (Radial Basis Function,RBF) 神经网络是一种性能良好的前向网络,具有最佳逼近.训练简洁.学习收敛速度快以及克服局部最小值问题的性能,目前已经证 ...

  5. stanford coursera 机器学习编程作业 exercise4--使用BP算法训练神经网络以识别阿拉伯数字(0-9)

    在这篇文章中,会实现一个BP(backpropagation)算法,并将之应用到手写的阿拉伯数字(0-9)的自动识别上. 训练数据集(training set)如下:一共有5000个训练实例(trai ...

  6. RBF神经网络——直接看公式,本质上就是非线性变换后的线性变化(RBF神经网络的思想是将低维空间非线性不可分问题转换成高维空间线性可分问题)

    Deeplearning Algorithms tutorial 谷歌的人工智能位于全球前列,在图像识别.语音识别.无人驾驶等技术上都已经落地.而百度实质意义上扛起了国内的人工智能的大旗,覆盖无人驾驶 ...

  7. 基于HHT和RBF神经网络的故障检测——第二篇论文读后感

    故障诊断主要包括三部分: 1.故障信号检测方法(定子电流信号检测 [ 定子电流幅值和电流频谱 ] ,振动信号检测,温度信号检测,磁通检测法,绝缘检测法,噪声检测法) 2.故障信号的处理方法,即故障特征 ...

  8. RBF神经网络通用函数 newrb, newrbe

      RBF神经网络通用函数 newrb, newrbe 1.newrb 其中P为输入向量,T为输出向量,GOAL为均方误差的目标,SPREED为径向基的扩展速度.返回值是一个构建好的网络,用newrb ...

  9. BP神经网络代码

    close allclear allclcload x.txt; load y.txt; inputs = x';targets = y; % 创建一个模式识别网络(两层BP网络),同时给出中间层神经 ...

随机推荐

  1. (8)java基础知识-字符编码

    这块比较乱待整理... http://www.regexlab.com/zh/encoding.htm 字符编码 将各种文字.图形.标点.数字整合在一个集合叫做字符集. 把这些字符集按照不用规则进行编 ...

  2. (2)oracle服务、建库

     一.oracle的服务 oracle 11g安装后服务一般是7到8个 1.Oracle ORCL VSS Writer Service Oracle卷映射拷贝写入服务(非必须启动) 2.Oracle ...

  3. UVALive 3027 Corporative Network (带权并查集)

    题意: 有 n 个节点,初始时每个节点的父节点都不存在,你的任务是执行一次 I 操作 和 E 操作,含义如下: I  u  v   :  把节点 u  的父节点设为 v  ,距离为| u - v | ...

  4. JSON 中的 key

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.易于人阅读和编写.同时也易于机器解析和生成.它基于JavaScript(Standard ECMA-262 ...

  5. Loj #6019. 「from CommonAnts」寻找 LCM

    给个链接:https://loj.ac/problem/6019 还是一道扩展卢卡斯+中国剩余定理....就当练练手 但是这题怎么这么卡常呢????!!!!! 在LOJ上死也过不去 (为什么要加那么多 ...

  6. HDU 4815 Little Tiger vs. Deep Monkey 2013 长春现场赛C题

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4815 [题意] n个题目,每题有各自的分数,A有50%的概率答对一道题目得到相应分数,B想要在至少P的概率 ...

  7. List和ArrayList的区别和联系

    1.    List是一个接口,而ArrayList是List接口的一个实现类. ArrayList类继承并实现了List接口. 因此,List接口不能被构造,也就是我们说的不能创建实例对象,但是我们 ...

  8. springmvc使用StringHttpMessageConverter需要配置编码

    Spring controller 如下 @Controller public class SimpleController { @ResponseBody @RequestMapping(value ...

  9. 关于UIWebView设置高度自适应的问题

    - (void)viewDidLoad { [super viewDidLoad]; _scrollView = [[UIScrollView alloc]initWithFrame:CGRectMa ...

  10. A system tap script to detect UDP beacons

    https://gist.github.com/jbradley89/178bbf3944786c494bd78f3df16a5472