A. 直接用神经网络工具箱构建bp神经网络,希望能给个例子说明,有注解最好,本人matlab新手,谢谢
BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层专前馈网络,是目前应用属最广泛的神经网络模型之一。BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。BP神经网络模型拓扑结构包括输入层(input)、隐层(hidden layer)和输出层(output layer)。
附件就是利用神经网络工具箱构建BP神经网络进行预测的实例。如果要用可视化工具,可以在命令窗口输入nntool.
B. matlab BP神经网络 performance 图这五条线的详细解释
横纵坐标不用说了,图上三条有颜色的实线分别是:BP训练过程的MSE指标在每一代中的表现,BP交叉验证过程的MSE指标在每一代中的表现,BP测试过程的MSE指标在每一代中的表现。尤其你要注意那条TEST红线,那是你的BP计算/训练结果。
BEST虚线说明BP网络训练到第八代的时候BP训练结果最理想。
GOAL虚线是你编程或者直接用的MATLAB的ANN工具箱去训练这个BP时,设置的网络训练停止目标(之一)。
C. 如何用MATLAB的神经网络工具箱实现三层BP网络
使用神经网络工具箱可以非常简便地实现网络建立和训练,实例代码如下:
%%BP算法
functionOut=bpnet(p,t,p_test)
%p,t为样本需要提前组织好
globalS1
net=newff(minmax(p),[S1,8],{'tansig','purelin'},'trainlm');%trainlm训练函数最有效
%net=newff(P,T,31,{'tansig','purelin'},'trainlm');%新版用法
net.trainParam.epochs=1000;
net.trainParam.goal=0.00001;
net.trainParam.lr=0.01;
net.trainParam.showWindow=false;%阻止训练窗口的弹出
net.trainParam.showCommandLine=false;%阻止训练窗口的弹出
net=train(net,p,t);
Out=sim(net,p_test);
end
上面的代码不完整,完整的带训练样本数据的程序见附件。
D. 需要把MATLAB中的BP神经网络工具箱与自己的一个软件项目结合
这个就是C++与matlab混合编程。但是神经网络工具箱比较特别,它反盗用比较严厉。采用回传统的混答编方式,可以调用matlab自己的函数,但无法成功调用神经网络工具箱。这一点在mathwork网站上也做了说明。
以C#为例,一般混编有四种方式:
(1)利用Matlab自身编译器,目的是将m文件转换为c或c++的源代码。
(2)利用COM或.NET组件技术。通过MATLAB中的Deploy tool工具将m文件编译成dll,然后在系统中调用。
(3)利用Mideva平台。没尝试过。
(4)利用MATLAB引擎技术。该方法相当于在.NET中运行MATLAB程序,获取其结果。优点是操作简单,过程简易。缺点是需要安装Matlab软件。
如果要调用神经网络工具箱,只有使用第四种方法,即引擎技术,其他方法都不可行。这种混编方式仅仅传递参数,因此不涉及到神经网络工具箱的代码,也就没有了防盗用限制。
E. 用matlab的nntool工具箱训练好的一个BP神经网络,下一步要怎么做才能进行数据输入得到相应的输出结果
a=sim(net,x)
说实话我也菜鸟级别,你看一下最后这个函数能不能用:
其中“a”自己随便可以设的,其实就是个代表返回值
“net”换成你训练好的函数,
“x”换成你的输入矩阵
F. 一个关于BP神经网络的问题,matlab中神经网络工具箱的初始权值和阀值是
训练BP神经网络所采取的随机初始参数确实是随机的,在训练过程中这些参数和权值都会朝着同一个大方向进行修正。例如你用BP神经网络来拟合曲线,找到输入值与输出值之间的线性规律,那么在训练的过程中这个拟合的曲线会不断的调整其参数和权值直到满足几个预设条件之一时训练停止。虽然这个训练出来的结果有时候会有一定误差,但都在可以接受的范围内。
缩小误差的一个方法是需要预先设置初始参数,虽然每次依然会得到不一样的模型(只要参数是随机修正的),但不同模型之间的差距会很小。另外可以反复训练,找到一个自己觉得满意的模型(可以是测试通过率最高,可以是平均结果误差值最小)。
至于你说别人怎么检查你的论文结果,基本上都是通过你的算法来重建模型,而且还不一定都用matlab来做,即便是用同样的代码都会出现不同的结果,何况是不同的语言呢?其实验算结果最重要的是看测试时的通过率,例如在对一组新的数据进行测试(或预测)时,通过率达到95%,别人用其他的方式重建了你的模型也得到这样的通过率,那么你的算法就是可行的。注意,在计算机专业的论文里面大家看重的不是代码,而是算法。
补充一点:只要你训练好了一个神经网络可以把这个神经网络以struct形式保存,这样这个网络可以被反复使用,且每次对同一组测试数据的预测结果都会一样。你也可以当做是检测论文可行性的工具。