请高人指点,BP训练程序显出错且误差极大

请高人指点,BP训练程序显出错且误差极大,第1张

出错是因为您训练数据有5行,但检验数据x只有1行,数据格式不对。

误差大的原因是因为您设计的神经网络只能逼近静态的一一映射函数,对于异或问题、多值映射问题是无法解决的,而您的样本恰恰是个多值映射问题。

此外,您的样本存在偏置,数据变化范围也很大,应该首先对数据进行归一化的预处理。而且还需要剔除异常数据和对数据进行滤波。

对训练参数设置也不佳。

一般的,神经网络误差晌枝游大的主要原因是神经网络的基函数是tansig函数,属于S函数的一种,无法通过线性扩张的形式逼近非静态、一一映射的函数。

修改基函数吧,但这些在神经网络命令是无法实现的,还是自己老老实实用m文件编制神经网络程序吧,不要调用命令了。这对深入了解和改进神经网络是很有宴销帮助的。

以下是修改的程序(仅仅对p的第一行进行训练):

clcclear allclose all

P=[666 675 634 620 609 620 689 726 701 711 712 728 725 722 717 721 718 739 764 750 757 698 650 641

669 659 633 623 628 607 667 718 754 726 741 739 749 746 736 726 740 765 744 734 741 714 647 645

665 666 646 627 609 596 591 584 604 623 657 704 694 716 708 714 695 731 726 725 716 667 657 659

622 650 621 598 583 575 556 537 545 578 632 659 647 641 651 648 628 635 673 690 702 649 623 613

653 628 610 586 590 583 662 705 711 712 742 746 733 756 751 724 728 738 742 751 744 695 637 638]

T=[669 659 633 623 628 607 667 718 754 726 741 739 749 746 736 726 740 765 744 734 741 714 647 645

665 666 646 627 609 596 591 584 604 623 657 704 694 716 708 714 695 731 726 725 716 667 657 659

622 650 621 598 583 575 556 537 545 578 632 659 647 641 651 648 628 635 673 690 702 649 623 613

653 628 610 586 590 583 662 705 711 712 742 746 733 756 751 724 728 738 742 751 744 695 637 638

676 659 620 607 624 617 667 711 722 736 751 734 724 755 733 722 718 772 747 775 750 719 668 640]

% 创建一个新的前向神经网络

net_1=newff(minmax(P(1,:)),T(1,:),[20,1],{'tansig','purelin'},'traingdm')

% 设置训练参数

net_1.trainParam.show = 1

net_1.trainParam.lr = 0.000001

net_1.trainParam.mc = 0.5

net_1.trainParam.epochs = 100000

net_1.trainParam.goal = 0.0001

% 调用 TRAINGDM 算法训练 BP 网络

[net_1,tr]=train(net_1,P(1,:),T(1,:))

% 对 BP 网络进行仿真

A = sim(net_1,P(1,:))

% 计算仿真误差

E = T(1,:) - A

MSE=mse(E)

figure(1)

X=1:24

plot(X,A,'r*',X,T(1,:),'bo')

title('o为搭州真实值,*为预测值')

x=[645 665 658 617 628 628 677 721 733 730 739 727 725 733 731 714 734 739 753 773 743 697 650 654]

%测试

sim(net_1,x)

这个得靠你自己编程实现,没有现成的函数。具体流程如下:

初始化:将各个权值、阈值都作为实数编码,构成染色体,并产生初始种群;

选择、交叉、变异:注意各个概率和交叉方式;

检验:将染色让洞体解码进神经网坦巧枯络,代入样本计算误差。可能你还可以使用最优个体保存策略。

循环迭代上述过程,直至误差满足条件。

将遗传宽茄算法的代数和误差记录下来,用plot函数就可以画出变化曲线了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12285630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存