matlab解决线性神经网络问题

本文分享了一位MATLAB和神经网络初学者如何解决一个简单问题的过程:使用MATLAB的神经网络工具箱训练一个BP网络来预测三个随机数的和。通过调整传递函数,解决了训练收敛快但测试结果不佳的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博主是MATLAB和神经网络的初学者,也是首次撰写博客。

刚开始研究神经网络,出现了很多问题,但是查询了很多资料也找不到答案。这里分享我解决问题所学习到的知识。

问题很简单: excel随机生成50组,每组3个-1到1的随机数。(省的考虑归一化的问题)result是3个输入的和。

input1input2input3result
0.699522-0.21806-0.117180.364281
0.1072020.391985-0.61678-0.11759
-0.98422-0.0810.11573-0.94949
-0.156670.118392-0.58789-0.62617
-0.37764-0.29995-0.62596-1.30354
0.29992-0.68941-0.59552-0.98501
0.9009280.0160550.8727961.789778
0.9092560.373775-0.834050.448985
前30个做训练,20个做测试。

lc
clear
close all

num = xlsread('D:\matlab\b.xlsx');

inputtrain = zeros(30,3);
inputtrain(1:30,:) = num(1:30,1:3);
resulttrain(1:30,1) = num(1:30,4);

inputtest = zeros(10,3);
inputtest(1:20,:) = num(31:50,1:3);
inputtest=inputtest';
inputtrain=inputtrain';
resulttrain=resulttrain';
%建立相应的BP网络
 net=newff(minmax(inputtrain),[3,1],{'logsig','tansig'},'traingdx');%tansig,purelin
 
%对没有训练的网络仿真
 %y1=sim(net,p);
%训练网络
 net.trainParam.epochs=2000;
 net.trainParam.lr=0.00001;
 net.trainParam.goal=0.00001;
 net=train(net,inputtrain,resulttrain);
 
 ty=sim(net,inputtest);
 train1=sim(net,inputtrain);
 ty=ty';
 plot(ty(:,1),'ro')
 hold on
plot(num(31:50,4),'k')
hold off
如此简单的程序,训练收敛的非常快,测试结果也不尽如人意。


后来发现

 net=newff(minmax(inputtrain),[3,1],{'logsig','tansig'},'traingdx');%tansig,purelin
是传递函数选择的问题,面对线性问题如果选用purelin作为传递函数效果就好得多

下面列出全部代码

clc
clear
close all

num = xlsread('D:\matlab\b.xlsx');

inputtrain = zeros(30,3);
inputtrain(1:30,:) = num(1:30,1:3);
resulttrain(1:30,1) = num(1:30,4);

inputtest = zeros(10,3);
inputtest(1:20,:) = num(31:50,1:3);
inputtest=inputtest';
inputtrain=inputtrain';
resulttrain=resulttrain';
%建立相应的BP网络
 net=newff(minmax(inputtrain),[3,1],{'purelin','purelin'},'traingdx');%tansig,purelin
 
%对没有训练的网络仿真
 %y1=sim(net,p);
%训练网络
 net.trainParam.epochs=2000;
 net.trainParam.lr=0.00001;
 net.trainParam.goal=0.00001;
 net=train(net,inputtrain,resulttrain);
 
 ty=sim(net,inputtest);
 train1=sim(net,inputtrain);
 ty=ty';
 plot(ty(:,1),'ro')
 hold on
plot(num(31:50,4),'k')
hold off
  
 

训练的结果:



效果明显好多了,除此之外第二层隐藏层的神经元数量不能太多,不然会产生过拟合现象。

关于不同传递函数的实质区别还需要深入研究,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值