matlab bp 神经网络-matlab实现BP神经网络,训练结果不好,附源代码

问题描述

matlab实现BP神经网络,训练结果不好,附源代码
希望大家看看,谢谢了!自己看了一整天都不知道哪里出现了问题,编程思想按照经典的机器学习的书

lr=0.05; %lr为学习速率;
err_goal=0.1; %err_goal为期望误差最小值
max_epoch=15000; %max_epoch为训练的最大次数;
a=0.9; %a为惯性系数
Oi=0;
Ok=0; %置隐含层和输出层各神经元输出初值为0
%提供两组训练集和目标值(3输入神经元,2输出)
%X=[1 1;-1 -1;1 1];
%T=[1 1;1 1];
load house_dataset;
x=houseInputs;
t=houseTargets;
%数据的归一化
maxRowx=max(x[]2);
maxRowt=max(t[]2);
minRowx=min(x[]2);
minRowt=min(t[]2);
% y = ( x - min )/( max - min )
for i=1:size(x2)
x(:i)=(x(:i)-minRowx)./(maxRowx-minRowx);
t(:i)=(t(:i)-minRowt)./(maxRowt-minRowt);

end
%初始化wki,wij(M为输入节点j的数量;q为隐含层节点i的数量;L为输出节点k的数量)
[MN]=size(x);
q=8;
[LN]=size(t); %N为训练集对数量
wij=rand(qM);
wki=rand(Lq);%随机值在-0.05到0.05之间
wij0=zeros(size(wij));
wki0=zeros(size(wki));

for epoch=1:max_epoch
for n=1:N %for every example

    neti=wij*x(:n);%q*1 每个隐藏层的输出    oi=1./(1+exp(-neti));    netk=wki*oi;%L*1 每个输出层的输出    ok=1./(1+exp(-netk));    deltak=ok.*(1-ok).*(t(:n)-ok);%输出层的误差项    deltai=oi.*(1-oi).*(wki'*deltak);%隐藏层de误差项    %更新对应的权值    deltawij=lr*deltai*(x(:n)');    deltawki=lr*deltak*(ok');    wij=wij+deltawij;    wki=wki+deltawki;    %计算误差函数    E=0.0;    for i=1:N %N为训练的总数        neti=wij*x(:i);%q*1 每个隐藏层的输出        oi=1./(1+exp(-neti));        netk=wki*oi;%L*1 每个输出层的输出        ok=1./(1+exp(-netk));        E=E+(ok-t)*(ok-t)';    end    E=E/2;    fprintf('the error is %f the iteration is %dn'Eepoch);endif E<err_goal    break;end

end

时间: 2024-10-06 08:21:23

matlab bp 神经网络-matlab实现BP神经网络,训练结果不好,附源代码的相关文章

编程-如何不使用Matlab已有命令编写BP神经网络基本原理,来实现手写数字识别?

问题描述 如何不使用Matlab已有命令编写BP神经网络基本原理,来实现手写数字识别? 如何不使用Matlab已有命令编写BP神经网络基本原理,来实现手写数字识别? 解决方案 http://download.csdn.net/detail/aoxiangyuntian123/8472775

c#与BP神经网络MATLAB程序混合编程的问题。求大神指点

问题描述 正在做一个项目,需要用到c#与BP神经网络MATLAB程序混合编程.我看网上有好多种方法做.有的用deploytool做成动态链接库的,还有的用COM组件做的,还有的用什么交叉混合编程.求大神指点到底用什么方法做呢??我现在只会用deploytool做成动态链接库,连接比较简单的m文件呢. 解决方案 解决方案二:用matlib将m文件编译成C#可用的dll.编译的时候选择编译类型为.net动态库解决方案三:编译的时候总会出现newoff出错,也就是说不能调用BP神经网络的工具箱,不知道

【何恺明最新论文】非局部神经网络,打造未来神经网络基本组件

大神 Kaiming He 日前在 arXiv 上新挂出来一篇论文,标题延续了一贯的简洁风格,叫做<非局部神经网络>(Non-local Neural Networks). 这是一篇 CMU 与 FAIR 合作的论文,第一作者是 CMU 的 Xiaolong Wang,其他两位作者是 Ross Girshick(DenseNet 作者之一)和 Abhinav Gupta(CMU 教授,他今年 CVPR + ICCV 一共发表了 15 篇论文). 摘要 卷积和递归运算都是一次处理一个局部邻域的基

DeepMind提出快速调参新算法PBT,适用GAN训练(附论文)

从围棋到Atari游戏到图像识别和语言翻译,神经网络在各个领域都取得了巨大的成功.但是经常容易被忽视的是,神经网络在某个特定应用中的成功通常取决于在研究初始时所做的一系列选择,包括选择要使用的网络类型以及用于训练的数据和方法.目前,这些选择(被称作超参数)是通过经验.随机搜索或计算密集型的搜索过程来实现的. DeepMind在最近的一篇论文<基于群体的神经网络训练>(Population Based Training of Neural Networks)中,提出了一种新的训练神经网络的方法,

为啥神经网络里的BP算法花了那么久才被发明?

Roseblatt在五十年代就提出了感知机, 又过了将近30年, 多层神经网络的BP算法才得以普及. 而事实上这不过是微积分中链式法则的简单应用而已, 为什么要花这么久呢? bengio在quora上这样回答道: 很多看似显而易见的想法只有在事后才变得显而易见. 在控制论中, 很早就开始应用链式反则来解决多层非线性系统. 但在80年代早期, 神经网络的输出是离散的, 这样就无法用基于梯度的方法来优化了. 这时Rumelhart和Hinton想到, 只要把输出做成平滑的(sigmoid), 就可以

matlab 最小二乘拟合-matlab的多维线性拟合问题

问题描述 matlab的多维线性拟合问题 问题是这样子的:有一个序列向量Yn(8*1维)在Yn和Y(n+1)之间存在这么一个递推关系Y(n+1)=A* Yn + B A B维要估计出的矩阵 应该怎么解决 或者有别的算法

matlab 噪声程序-MATLAB程序中一段不明白,谁帮我具体解释下。谢啦!

问题描述 MATLAB程序中一段不明白,谁帮我具体解释下.谢啦! %加噪声 snr=10; sp=mean(yy.^2); attn=sp./ 10^(snr/10); attn = sqrt(attn); noise=randn(1,length(yy)).*attn; np=mean(noise.^2); snr1=10*log10(sp/np); data=yy+noise;

matlab 数据处理-求解MATLAB的编程,数据图像的处理

问题描述 求解MATLAB的编程,数据图像的处理 请问用MATLAB处理数据,已知XY,分别有12个数,假设他们之间有线性关系,检测他们是否有指数关系y=ae^b*x怎么编写代码? 解决方案 我觉得,X,Y是多少数据并没有关系,首先列两个方程a*e^bx1=y1a*e^bx2=y2,根据这两个式子求出a和b,然后带入a*e^bx3看是否等于y3,如果相等就有指数关系,不相等就没有关系. 解决方案二: for i=1:12 z(i)=y(i)-ae^b*x;end sum1=sum(abs(z))

【Matlab编程】Matlab让电脑失而复得

       在学校经常有同学电脑失窃,大抵都是粗细大意.据说iPhone手机失窃后可以获取小偷的照片,从而将照片找到.现在用matlab写一个程序使得当小偷使用电脑上网时,电脑自动将电脑前面的人的照片发到你指定的邮箱.前提是你的电脑装有摄像头并且有网!先用下面代码测试你邮箱是否正确设置: clear myaddress='sender@qq.com'; %这里sender为你发邮箱的qq号,注意你的邮箱要已经提供SMTP服务,没有也没关系,qq邮箱会提醒设置设置的mypassword='pas