文章目录:
用matlab编BP神经网络预测代码
matlab编写BP神经网络很方便的,这个工作不用像编程序的C什么的那样还要编写算法
这个算法早已经在软件的库里提供了。你只要用一条语句就出来了。把参数,深度和节点固定的往里一代数就可以了。
还有一点,注意最后结果的收敛性,神经网络发展一直是曲折前进的,为什么这样,现在不太给力,因为面临着一个收敛的问题,实现起来效果不好。这些程序网上有很多,你借一本基本的神经网络的书里面也有。望采纳。
求BP网络预测的matlab代码
close all ;
clear ;
echo on ;
clc ;
% NEWFF——生成一个新的前向神经网络
% TRAIN——对 BP 神经网络进行训练
% SIM——对 BP 神经网络进行仿真
pause
% 敲任意键开始
clc
% 定义训练样本
% P 为输入矢量
p=[ ];
% T 为目标矢量
t= [];
%训练样本的归一化
for i=1:(训练样本的指标数)
P(i,:)=(p(i,:)-min(p(i,:)))/(max(p(i,:))-min(p(i,:)));
end
pause
clc
% 创建一个新的前向神经网络
net=newff(minmax(P),[15,2],{'tansig','purelin'},'traingda'); %这些参数要自己设置
% 当前输入层权值和阈值
inputWeights=net.IW{1,1};
inputbias=net.b{1} ;
% 当前网络层权值和阈值
layerWeights=net.LW{2,1} ;
layerbias=net.b{2} ;
pause
clc
% 设置训练参数 也要自己设置
net.trainParam.show = 50;
net.trainParam.lr = 0.05;
%net.trainParam.mc = 0.9; % 附加动量因子
net.trainParam.epochs =5000;
net.trainParam.goal = 1e-4;
pause
clc
% 调用 TRAINGDM 算法训练 BP 网络
[net,tr]=train(net,P,t);
pause
clc
% 对 BP 网络进行仿真
p_test=[];
for i=1:6
P_test(i,:)=(p_test(i,:)-min(p_test(i,:)))/(max(p_test(i,:))-min(p_test(i,:)));
end
t_test=[];
A = sim(net,P_test)
% 计算仿真误差
E = t - A
error=mse(E)
pause
clc
echo off
%反归一化
for i=1:2
predict(i,:)=A(i,:)*(max(t(i,:))-min(t(i,:)))+ min(t(i,:));
end
predict %即仿真结果
pause
下图用matlab怎么编bp算法代码
%读取训练数据
[f1,f2,f3,f4,class] = textread('trainData.txt' , '%f%f%f%f%f',150);
%特征值归一化
[input,minI,maxI] = premnmx( [f1 , f2 , f3 , f4 ]') ;
%构造输出矩阵
s = length( class) ;
output = zeros( s , 3 ) ;
for i = 1 : s
output( i , class( i ) ) = 1 ;
end
%创建神经网络
net = newff( minmax(input) , [10 3] , { 'logsig' 'purelin' } , 'traingdx' ) ;
%设置训练参数
net.trainparam.show = 50 ;
net.trainparam.epochs = 500 ;
net.trainparam.goal = 0.01 ;
net.trainParam.lr = 0.01 ;
%开始训练
net = train( net, input , output' ) ;
%读取测试数据
[t1 t2 t3 t4 c] = textread('testData.txt' , '%f%f%f%f%f',150);
%测试数据归一化
testInput = tramnmx ( [t1,t2,t3,t4]' , minI, maxI ) ;
%仿真
Y = sim( net , testInput )
%统计识别正确率
[s1 , s2] = size( Y ) ;
hitNum = 0 ;
for i = 1 : s2
[m , Index] = max( Y( : , i ) ) ;
if( Index == c(i) )
hitNum = hitNum + 1 ;
end
end
sprintf('识别率是 %3.3f%%',100 * hitNum / s2 )
看了你的数据,你至少要有的类标号吧,不知道你哪里是输入向量,哪里是输出向量
g','purelin'},'traingda'); %这些参数要自己设置% 当前输入层权值和阈值 inputWeights=net.IW{1,1}; inputbias=net.b{1} ;% 当前网络层权值和阈值 layerWeig
ose all ;clear ;echo on ;clc ;% NEWFF——生成一个新的前向神经网络 % TRAIN——对 BP 神经网络进行训练 % SIM——对 BP 神经网络进行仿真 p
(minmax(P),[15,2],{'tansig','purelin'},'traingda'); %这些参数要自己设置% 当前输入层权值和阈值 inputWeights=net.IW{1,1}; inputbias=net.b{1} ;% 当前网络层权值和阈值 layerWei
p(i,:)))/(max(p(i,:))-min(p(i,:))); endpauseclc% 创建一个新的前向神经网络 net=newff(minmax(P),[15,2],{'tansig','purelin'},'traingda'); %这
ax(P),[15,2],{'tansig','purelin'},'traingda'); %这些参数要自己设置% 当前输入层权值和阈值 inputWeights=net.IW{1,1}; inputbias=net.b{1}