构建3层BP神经网络模型在Matlab中的实践

整理数据

本例中的数据来自于Matalab提供的内置数据,可以通过代码

load bodyfat_dataset

获得,为方便其他软件读取,已经将数据复制粘贴到Excel中

本例中,1至13列为输入变量,第14列为输出变量,即输入层包含13个神经元,输出层又一个神经元。另外设定一个隐含层,包括20个神经元

每个神经元包含252个数据点,其中最后一个点不参与训练,留作测试最终的模型,即利用前251个数据点训练模型,利用最后一个点检验模型

在Matlab中输入数据

1、点击打开 Matlab ,确保保存的Excel文件和软件路径一致

3层bp神经网络 matlab bp神经网络模型matlab_3层bp神经网络 matlab

2、在 Editor 界面中编辑代码,其中 clc 清除 Command Window, clear 清除 Workspace

2、在 Editor 界面中编辑代码,其中 clc 清除 Command Window, clear 清除 Workspace

clcclear

Note 1:

选中代码,点击鼠标右键,选择 Evaluate Selection 执行选中代码

3层bp神经网络 matlab bp神经网络模型matlab_数据_02

3、利用 xlsread 函数读取数据,其中第一格单引号内是文件名称,第二格是工作表位置,第三格单引号内是数据范围

clccleardata=xlsread('bodyfat_dataset',1,' A1:N252'

执行代码后,新的变量出现在 Workspace 页面中,其中,矩阵列表示各变量,行表示各数据

3层bp神经网络 matlab bp神经网络模型matlab_3层bp神经网络 matlab_03

进行BP神经网络建模

数据录入完成后,继续在Editor界面进行操作

1、首先利用feedforwardnet函数建立模型,20表示隐含层包含20个神经元,输入层至隐含层的传递函数为Hyperbolic tangent函数,隐含层至输出层的传递函数为Sigmoid函数

clccleardata = xlsread('bodyfat_dataset',1,' A1:N252');net = feedforwardnet(20);net.layers{1}.transferFcn = 'tansig';net.layers{2}.transferFcn = 'logsig';

2、对原始数据进行拆分,前251个数据用来训练,最后一个用来测试

clccleardata = xlsread('bodyfat_dataset',1,' A1:N252');net = feedforwardnet(20);net.layers{1}.transferFcn = 'tansig';net.layers{2}.transferFcn = 'logsig';input = data(1:251,1:13);inputend = data(end,1:13);target = data(1:251,14);targetend = data(end,end);

3、利用train对模型进行训练,遵循反向修改权重的原则

clccleardata = xlsread('bodyfat_dataset',1,' A1:N252');net = feedforwardnet(20);net.layers{1}.transferFcn = 'tansig';net.layers{2}.transferFcn = 'logsig';input = data(1:251,1:13);inputend = data(end,1:13);target = data(1:251,14);targetend = data(end,end);net = train(net,input',target');

在跳出的训练图中,可以看出该模型输入层个神经元,隐含层20个,输出层1个。模型训练17次就达到预期要求

3层bp神经网络 matlab bp神经网络模型matlab_数据_04

4、最后,利用留置的数据进行测试,输出值与目标值的偏差

clccleardata = xlsread('bodyfat_dataset',1,' A1:N252');net = feedforwardnet(20);net.layers{1}.transferFcn = 'tansig';net.layers{2}.transferFcn = 'logsig';input = data(1:251,1:13);inputend = data(end,1:13);target = data(1:251,14);targetend = data(end,end);net = train(net,input',target');net(inputend')-targetend

Note 1 :

重复运行代码,可以发现每次的结果并不相同,这是因为,初始权重是随机设定的

Note 2 :

由于初始权重是随机设定的,所以每次运行的结果可能有所不同,这也体现出神经网络模型的局限性,模型训练找出的误差最小权重可能只是局部上使误差最小的权重,这样的权重可能有很多个,所以结果有很多种。解决这种问题的一个方法是,留一部分数据不参加训练,而是用来测试模型的输出结果,当输出与目标值较为接近时,再利用模型进行预测

5、在代码前添加rng(0),则限定了初始权重,重复运行代码,将得到相同的结果

clcclear1rng(0)data = xlsread('bodyfat_dataset',1,' A1:N252');net = feedforwardnet(20);net.layers{1}.transferFcn = 'tansig';net.layers{2}.transferFcn = 'logsig';input = data(1:251,1:13);inputend = data(end,1:13);target = data(1:251,14);targetend = data(end,end);net = train(net,input',target');net(inputend')-targetend

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空