CODE:
%训练变量
xunlianxiangliang=zeros(2,180);%定义一个2行150列的0矩阵:训练变量
xunlianxiangliang(1,=C(1:180);
xunlianxiangliang(2,=S(1:180);
%测试变量
testxiangliang=zeros(2,268);%定义一个2行221列的0矩阵:测试变量
testxiangliang(1,=C(1:268);%C
testxiangliang(2,=S(1:268);%S
%数据归一化
A=xunlianxiangliang;
y1=meizhenrenshu(1:180);
B=y1;
y2=meizhenrenshu(1:268);
[inputn,inputps]=mapminmax(A);
ps.ymin=0;
[inputn,inputps]=mapminmax(A,ps);
[outputn,outputts]=mapminmax(B);
ts.ymin=0;
[outputn,onputts]=mapminmax(B,ts);
%利用minmax函数求输入样本范围
net = newff(minmax(inputn),[10,1],{'tansig','purelin','traingdx'})%前馈网络创建函数,语法:net = newff ( A, B, {C} ,‘trainFun’)
net.trainParam.show=1;%显示训练迭代过程
net.trainParam.lr=0.05;%设置学习率
net.trainParam.epochs=3000;%设置最大迭代次数
net.trainParam.goal=1e-10;%设置目标值 训练要求精度
net.trainParam.mu=1;
net.trainParam.min_grad=1e-15;
% net.trainParam.mu_dec=0.2;
% net.trainParam.mu_inc=1.2;
% net.trainParam.mu_max=1e15;
[net,tr]=train(net,inputn,outputn);%训练网络
net.Iw{1,1}%输入层和隐层间的权值
net.b{1}%输入层和隐层间的阈值
net.lw{2,1}%隐层到输出层间的权值
net.b{2}%隐层到输出层间的阈值
inputtest=testxiangliang;
[inputtestn,inputps]=mapminmax(inputtest);
ps.ymin=0;
[inputtest,inputps]=mapminmax(inputtest,ps);
%仿真
BPoutput=sim(net,inputtest);
BPout=mapminmax('reverse',BPoutput,outputts);
x=1:268;
plot(x,y2,x,BPout,'r')
legend('真实值','预测值')
xlabel('视频帧数')
ylabel('数目')
MAE=sum(abs(BPout-y2))/131;
MRE=sum(abs((BPout-y2)./y2))/131;