BP神经网络实现实例1曲线拟合

1.定义:曲线拟合(curve fitting)是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两变量间的关系。主要方法就是我们高中学过的最小二乘法。
2.实例拟合曲线
用BP神经网络拟合给出的点的曲线,10个点分别为(0,3)、(1,1)、(2,2)、(3,4)、(4,6)、(5,5)、(6,2)、(7,1)、(8,6)、(9,8)、(10,9)

close all;%close all是将所有打开的图片关掉。
P = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
T = [3, 1, 2, 4, 6, 5, 2, 1, 6, 8, 9];
%由于feedforwardnet函数自动对样本进行归一化和划分训练、验证、测试集,
net = feedforwardnet(10, 'traingd'); 
%'5'是指隐含层有10个神经元,这里只有一个隐含层,多个隐含层神经元的个数设置为[10,3,...]
net.trainParam.lr = 0.01; %学习速率
net.trainParam.epochs = 10000; %最大训练次数
net.trainParam.goal = 1e-6; %最小误差,达到该精度,停止训练
net.trainParam.show = 50; %50次展示训练结果
net = train(net, P, T); %训练
Y = net(P); %输出
perf = perform(net, Y, T);%误差
plot(P, T, P, Y, 'r-')

在这里插入图片描述

重新训练一次
在这里插入图片描述
在这里插入图片描述

修改成3个和4个神经元的2个隐含层,发现拟合曲线偏离严重。也就是误差越小越好。

close all;%close all是将所有打开的图片关掉。
P = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
T = [3, 1, 2, 4, 6, 5, 2, 1, 6, 8, 9];
%由于feedforwardnet函数自动对样本进行归一化和划分训练、验证、测试集,
%所以就不用手动将数据进行归一化处理,但不知道有没有打乱顺序
% n=size(P,2); temp=randperm(n); P_train=P(temp(1:8));
% T_train=T(temp(1:8)); P_test=P(temp(9:end)); T_test=T(temp(9:end));
%
% [p_train,p_input]=mapminmax(P_train,0,1);
% [t_train,t_output]=mapminmax(T_train,0,1);
% p_test=mapminmax(P_test,p_input);
net = feedforwardnet([3,4], 'traingd'); 
%'3'是指隐含层有3个神经元,这里只有一个隐含层,多个隐含层神经元的个数设置为[3,4,...]

net.trainParam.lr = 0.01; %学习速率
net.trainParam.epochs = 10000; %最大训练次数
net.trainParam.goal = 1e-6; %最小误差,达到该精度,停止训练
net.trainParam.show = 50; %50次展示训练结果
net = train(net, P, T); %训练
Y = net(P); %输出
perf = perform(net, Y, T);%误差
plot(P, T, P, Y, 'r-')

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值