matlab关于bp神经网络,关于matlab的BP神经网络

其他回答(7)

ffd6ac8b64ae3ad2c6d02f2b36d5143f.png

buzhuangweng

高分答主

02-01

TA获得超过7907个赞

P、T矩阵均为一列为一个样本,因此P、T的列数必须相等,否则报错。你参考下别人的程序,我建议使用newff函数,不要弄得这么复杂。还有P、T的生成不需要那么复杂,只需要:

P(i,:)=YY(i:i+2);

附上newff函数的格式为:

net=newff(PR,[S1 S2 ...SN],{TF1 TF2...TFN},BTF,BLF,PF),函数newff建立一个可训练的前馈网络。输入参数说明:

PR:Rx2的矩阵以定义R个输入向量的最小值和最大值;

Si:第i层神经元个数;

TFi:第i层的传递函数,默认函数为tansig函数;

BTF:训练函数,默认函数为trainlm函数;

BLF:权值/阀值学习函数,默认函数为learngdm函数;

PF:性能函数,默认函数为mse函数。

ffd6ac8b64ae3ad2c6d02f2b36d5143f.png

baoguangfeng

新兵答主

07-15

TA获得超过7911个赞

由于你没有给出几年来工资数,无法为你预测后五年的工资。现给你一个例子,希望对你有点启发。已知2019年至2019年的某地区人口总数3583,4150,5062,4628,5270,5340;现要预测2019年和2019年的人口总数。

% 清空环境变量

clear all;close all;clc

t=2019:2019;

% x为原始序列(行向量)

x=[3583 4150 5062 4628 5270 5340];

% 自回归阶数

lag=2;

%预测年份或某一时间段

t1=2019:2019;

%预测步数为fn

fn=length(t1);

[f_out,iinput]=BP(x,lag,fn);   %BP神经网络函数

n1=length(t1);

P=vpa(f_out,5);

[t1'' P'']

% 画出预测图

figure,plot(2019:2019,iinput,''b''),hold on

plot(2019:2019,[iinput(end),f_out],''r''),grid on

title(''BP神经网络预测某地区人口数'')

如有问题,可以私聊或通过其他方式讨论。

ffd6ac8b64ae3ad2c6d02f2b36d5143f.png

caoleijing

优质答主

07-15

TA获得超过2506个赞

给你个例子,只要把训练输入输出数据换成你自己的就可以了,不懂可以加1298792082

% 现给出一药品商店一年当中12个月的药品销售量(单位:箱)如下:

% 2056 2395 2600 2298 1634 1600 1873 1487 1900 1500 2046 1556

% 训练一个BP网络,用当前的所有数据预测下一个月的药品销售量。

% 我们用前三个月的销售量预测下一个月的销售量,

% 也就是用1-3月的销售量预测第4个月的销售量,

% 用2-4个月的销售量预测第5个月的销售量,

% 如此循环下去,直到用9-11月预测12月份的销售量。

% 这样训练BP神经网络后,就可以用10-12月的数据预测来年一月的销售量。

% 实现程序如下:

%% 原始数据

P =[2056 2395 2600;2395 2600 2298;2600 2298 1634;2298 1634 1600;...

1634 1600 1873;1600 1873 1478;1873 1478 1900;1478 1900 1500;...

1900 1500 2046;];

%% 目标数据

T = [2298 1634 1600 1873 1487 1900 1500 2046 1556];

%% 对原始数据和目标数据进行归一化处理

pmax = max(P);

pmax1 = max(pmax);

pmin = min(P);

pmin1 = min(pmin);

for i = 1 : 9

P1(i, :) = (P(i, :) - pmin1) / (pmax1 - pmin1);

T1(i) = (T(i) - pmin1) / (pmax1 - pmin1);

end

%% 建立BP网络

net = newff(P1'', T1, [3 7], {''tansig'' ''logsig''}, ''traingd'');

%% 设置网络参数并进行训练

% for i = 1 : 9

net.trainParam.epochs = 15000;

net.trainParam.goal = 0.00001;

net.trainParam.lr = 0.1

net = train(net, P1(i,:)'', T1(i));

% end

%% 将10-12月的数据输入网络进行预测来年一月的销售量(归一化后的数值)

y = sim(net, [1500 2046 1556]'');

%% 反归一化求出来年一月份的销售量

y1 = y * (pmax1 - pmin1) + pmin1;

% 如果神经网络的训练函数使用trainlm,则仿真步骤会很少,但需要较大的系统内存。

% 经预测,来年一月的销售量(y1)为1.6845e+003箱(每次运行后的结果可能不同)

ffd6ac8b64ae3ad2c6d02f2b36d5143f.png

chaituodie

新兵答主

07-13

TA获得超过1162个赞

%% 训练集/测试集产生

% 训练集——用于训练网络

P_train = ;%输入集

T_train = ;%输出集

% 测试集——用于测试或者使用。

P_test = ;%输入

T_test ;

N = size(P_test,2);

%% BP神经网络创建、训练及仿真测试

% 创建网络

net = newff(P_train,T_train,9);

% 设置训练参数

net.trainParam.epochs = 1000;

net.trainParam.goal = 1e-3;

net.trainParam.lr = 0.01;

% 训练网络

net = train(net,P_train,T_train);

% 仿真测试、使用。

T_test = sim(net,P_test);%得到结果。

ffd6ac8b64ae3ad2c6d02f2b36d5143f.png

bikaoshao

高能答主

07-09

TA获得超过9569个赞

%采用动量梯度下降算法训练 BP 网络。

close all

clear

echo on

clc

% NEWFF——生成一个新的前向神经网络

% TRAIN——对 BP 神经网络进行训练

% SIM——对 BP 神经网络进行仿真

pause

% 敲任意键开始

clc

% 定义训练样本

% P 为输入矢量 pau

P=[-1,-2,3,1;-1,1,5,-3];

% T 为目标矢量

T=[-1, -1, 1, 1];

pause;

clc

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

minmax(P)

net=newff(minmax(P),[3,1],{''tansig''''purelin''},''traingdm'');

% minmax(P)取值范围是P内的最小值到最大值 [3,1]是3个神经元 1维 tansig purelin traingdm各层神经网络的激励函数

% tansig purelin隐含层更改权值的函数 当前输入层权值和阈值

inputWeights=net.IW{1,1};

inputbias=net.b{1};

% 当前网络层权值和阈值

layerWeights=net.LW{2,1};

layerbias=net.b{2};

%表示对各层神经网络的权值与阈值传递到相应变量

pause

clc

% 设置训练参数

net.trainParam.show = 50; %训练显示间隔 50次显示一次

net.trainParam.lr = 0.05; %学习步长0.05学习率

net.trainParam.mc = 0.9; %动量项系数0.9

net.trainParam.epochs = 1000; %训练次数1000次

net.trainParam.goal = 1e-3; %训练精度目标为0.001

pause

clc

% 调用 traingdm 算法训练 BP 网络

[net,tr]=train(net,P,T);%调用网络指令

pause

clc

% 对 BP 网络进行仿真

A=sim(net,P)

% 计算仿真误差

E=T-A

MSE=mse(E)

pause

clc

echo off

ffd6ac8b64ae3ad2c6d02f2b36d5143f.png

biaosheizhuan

高能答主

07-09

TA获得超过8199个赞

首先是我不知道你用的matlab是什么版本。

如果用的2019以后的版本,那么你这样初始化神经网络一定会报警告。

2019版以后初始化神经网络的语句是这样的

net = newff(p, t, 7);

输出层不需要自己去告诉系统。

我想知道的第二个问题,是你的输出层函数是否需要使用logsig。如果使用purelin,那么你大可不必去归一化。后面我会告诉你原因。

你手动指定了训练次数,但是学习率0.01这个数值不知道你从哪里找到的。我可能会选择高一点的学习率,最高我用过0.25.

训练函数你也是手动指定的,这个是需要的么?如果不需要,对于7个神经节点,完全可以使用trainlm,这样你也不需要这么多的训练次数。

下面说一下2019以后的matlab中,神经网络训练增加的一个功能。在初始化神经网络以后,有一个默认的dividing function,将训练样本中的一部分用来校验神经网络性能,以防止过度训练。那么这个参数可能会导致训练不充分。在初始化神经网络以后,需要做的工作是设定net.divideFcn = '''';用来去掉这个分配函数。

如果你需要更改你的transfer function,那么可以在net.layers{2}.transferFcn = ''logsig''将输出层传输函数手动修改。

那么,我使用全默认设置,没有进行归一化处理,获得的结果是这样的。

这个就是把你的t和训练后的神经网络计算的结果放在一起。结果已经很不错了。

如过我去掉了分配函数,那么神经网络就会一直训练到训练次数上限或者达到目标值。165次训练后,误差值是1.77e-19(误差使用mean squared error计算),结果在这里贴出来已经没意义了,因为几乎没有误差。

如果你还有问题,那么跟我细聊一下。

ffd6ac8b64ae3ad2c6d02f2b36d5143f.png

biaohuaigang

高分答主

07-08

TA获得超过7463个赞

比较新的版本,比如说matlab 2019以上的,都不需要装神经网络的工具箱

建立网络步骤:

1、数据归一化:输入的数据通常为P,输出数据通常为T,数据格式为:每列对应一个样本,归一化常用函数:mapminmax

[pn,ps]=mapminmax(p); [tn,ts]=mapminmax(t)

pn,tn是归一化后的数据,ps, ts是归一化的结构体,在后面反归一化预测值很有用。

2、建立网络并设定参数

net=newff(pn,tn,[ ]) 中括号里面的是输入层数,隐含神经元数,输出层数,还可以设定节点传递函数等等的参数

net.trainparam.epochs=1000 训练的次数

net.trainparam.goal=0.0001 训练的误差目标值

net.trainparam.lr=0.1 学习速率,通常在0到1之间,过大过小都不好

3、预测并分析

an=sim(net, pn)

ouput=mapminmax(''reverse'', an, ts) 根据之前归一化的标准,对预测结果进行反归一化,得到结果

error=output-t 这里是对误差进行输出,也可以用error=sum(asb(output-t))

当然也可以作图,比如说:

plot(p,t,''-o'')

hold on

plot(p, output,''-*'')

看预测值和真实值能否吻合

还可以在神经网络训练完成后的对话框中看MSE和R方

还有很多方法提高神经网络的精度,以上程序没有经过MATLAB调试,但大致过程如上

纯手打,希望采纳!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值