原文来自  老饼玩转-BP神经网络http://bp.bbbdata.com/teach#140


目录

一、建模的步骤

二、建模代码

三、模型的提取流程

四、模型提取的代码

五、一些个性化操作


本文介绍在matlab神经网络工具箱(2012b以后)的建模方式和DEMO代码。
新的matlab神经网络工具箱训练BP神经网络模流程只需要三个步骤,这有区别于老方式。

一、建模的步骤

1、设置神经网络及参数
主要是设置隐层节点数、训练步数等。

2、将所有数据投入训练
工具自动将数据分割为三份(训练,验证和测试,默认70%,15%,15%),训练数据用于训练,验证数据在训练过程中检验是否过拟合,测试数据留给用户自行测试。
PASS:数据不需要归一化,工具箱会自动归一化

3、查看结果
从工具箱的训练结果中抽出训练数据和测试数据,检验两者的结果。

PASS:网上很多代码仍然在使用归一化、自留检测数据的方式,主要是跟了旧版本的教材。2012前,神经网络工具箱没有这么自动化。


二、建模代码

matlab版本为2014b,代码如下:

clear all;
close all ;
%================原始数据====================
x1 = linspace(-3,3,100);     % 在[-3,3]之间线性生成100个数据
x2 = linspace(-2,1.5,100);   % 在[-2,1.5]之间线性生成100个数据
X  = [x1;x2];                          % 将x1,x2作为输入数据
y = 10*sin(x1)+0.2*x2.*x2;   % 生成y
setdemorandstream(88);       % 老饼为了每次运行的结果一致设定随机种子,实际中可以去掉
%==============网络训练 ============================
%使用用输入输出数据(X,y)建立网络,
%隐节点个数设为3.其中输入层到隐层、隐层到输出层的节点分别为tansig和purelin,使用trainlm方法训练。
net = newff(X,y,3,{'tansig','purelin'},'trainlm');
%设置一些常用关键参数
net.trainparam.goal = 0.00001;    % 训练目标:均方误差低于0.0001
net.trainparam.show = 400;        % 每训练400次展示一次结果
net.trainparam.epochs = 15000;    % 最大训练次数:15000.
net.divideParam.trainRatio=0.7;   % 用于训练的数据比例
net.divideParam.valRatio=0.15 ;   % 用于验证过拟合的数据比例
net.divideParam.testRatio=0.15;   % 用于比例
net.trainparam.max_fail =6;       % 过拟合验证失败次数[net,tr,net_y] = train(net,X,y);  % 调用matlab神经网络工具箱自带的train函数训练网络y,net返回% ===========画图==================================
figure
subplot(2,1,1);
title('训练数据的拟合效果')
hold on
plot(1:length(tr.trainInd),y(tr.trainInd),'b')
plot(1:length(tr.trainInd),net_y(tr.trainInd),'r')subplot(2,1,2);
title('测试数据的拟合效果')
hold on
plot(1:length(tr.testInd),y(tr.testInd),'b')
plot(1:length(tr.testInd),net_y(tr.testInd),'r')%=============网络对新输入的使用==========================
sim_y = sim(net,X);               % 实际与上面的net_y一致

三、模型的提取流程

训练完后,如果需要提取权重和阈值,则也需要三个步骤:

1、提取网络的权重阈值WB
2、提取网络的输入输出阈值
3、将网络的权重阈值反归一化


四、模型提取的代码

模型提取代码如下(代码续训练代码):

% %----------------------提取表达式(对应归一化数据)------------------------------------
% 提取权重WB
w12 = net.iw{1,1};                          % 第1层(输入层)到第2层(隐层)的权值
b2 = net.b{1};                              % 第2层(隐层)的神经元阈值
w23 = net.lw{2,1};                          % 第2层(输入层)到第3层(输出层)的权值
b3 = net.b{2};                              % 第3层(输出层)的神经元阈值
% 提取输入输出范围
iMin = net.inputs{1}.range(:,1);
iMax = net.inputs{1}.range(:,2);
oMin =  net.outputs{2}.range(:,1);
oMax =  net.outputs{2}.range(:,2);% 将网络的WB反归一化
W12 = w12 * 2 ./repmat(iMax' -iMin',size(w12,1),1);
B2  = -w12* (2*iMin ./(iMax - iMin) + 1) + b2;
W23 = w23 .*repmat((oMax -oMin),1,size(w23,2))/2;
B3  = (oMax -oMin) .*b3 /2 + (oMax -oMin)/2 + oMin;
% 最后的验证按表达式计算与用工具箱计算的差异
formula_sim_y = W23*tansig( W12 *X + repmat(B2,1,size(X,2))) + repmat(B3,1,size(X,2));
formula_err = max(max(abs(formula_sim_y - sim_y)));

五、一些个性化操作

1、自留测试数据

如果需要自己留测试数据,则自留测试数据,再把其余数据投入网络训练,并把测试占比改为0,训练与检验占比和改为1即可:

net.divideParam.trainRatio=0.85;   % 用于训练的数据比例
net.divideParam.valRatio=0.15 ;   % 用于验证过拟合的数据比例
net.divideParam.testRatio=0;      % 用于比例

这样需要自己把测试数据投入sim函数中获取预测结果。

2、不作泛化检验

net.divideParam.trainRatio=0.85;   % 用于训练的数据比例
net.divideParam.valRatio=0 ;   % 用于验证过拟合的数据比例
net.divideParam.testRatio=0.15;      % 用于比例

相关文章

​《BP神经网络梯度推导》

​​​​​​《BP神经网络提取的数学表达式》

《一个BP的完整建模流程》

一个BP神经网络的完整matlab代码(含模型公式提取)相关推荐

  1. BP神经网络预测回归MATLAB代码(代码完整可直接用,注释详细,可供学习)

    BP神经网络预测回归MATLAB代码(代码完整可直接用,注释详细,可供学习) 一.前言 二.代码部分 2.1 初始化 2.2 读取数据 2.3 设置训练集和测试集 2.4 数据归一化 2.5 求解最佳 ...

  2. 【预测模型】基于BP神经网络预测价格matlab代码

    1 简介 BP神经网络模型是目前应用最为广泛神经网络之一.它的本质是通过对历史数据的学习找出数据变化趋势之间的非线性关系,并通过输出量与预期值之间的误差不断调整网络中各个单元的权重,使整个网络的误差最 ...

  3. 基于标准反向传播算法的改进BP神经网络算法(Matlab代码实现)

  4. BP神经网络算法在MATLAB中的代码

    BP神经网络算法在MATLAB中的代码通常包括以下步骤: 导入所需的库,如nnstart.patternnet和train. 准备训练数据和测试数据.这通常包括读取数据文件.将数据转换为矩阵的形式并分 ...

  5. 【风电功率预测】基于matlab帝国殖民竞争算法优化BP神经网络风电功率预测【含Matlab源码 1314期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [风电功率预测]基于matlab帝国殖民竞争算法优化BP神经网络风电功率预测[含Matlab源码 1314期] ⛄二.帝国殖民竞争算法简 ...

  6. 【电力负荷预测】基于matlab BP神经网络电力负荷预测【含Matlab源码 278期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源: [电力负荷预测]基于matlab BP神经网络电力负荷预测[含Matlab源码 278期] 获取代码方式2: 付费专栏Matlab智能算 ...

  7. 【Matlab风电功率预测】麻雀算法优化BP神经网络风电功率预测【含源码 1319期】

    一.代码运行视频(哔哩哔哩) [Matlab风电功率预测]麻雀算法优化BP神经网络风电功率预测[含源码 1319期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [ ...

  8. 【Matlab风电功率预测】遗传算法优化BP神经网络风电功率预测【含源码 760期】

    一.代码运行视频(哔哩哔哩) [Matlab风电功率预测]遗传算法优化BP神经网络风电功率预测[含源码 760期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1 ...

  9. 【Matlab风电功率预测】粒子群算法优化BP神经网络风电功率预测【含源码 347期】

    一.代码运行视频(哔哩哔哩) [Matlab风电功率预测]粒子群算法优化BP神经网络风电功率预测[含源码 347期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [ ...

最新文章

  1. 前来推荐一本比较喜欢的读物——《浪潮之巅》
  2. 【FPGA】Buffer专题介绍(二)
  3. 12. MySQL简单使用
  4. 1035 插入与归并 (25 分)(c++)
  5. Service order save debug for distribution lock set logic
  6. 信息学奥赛一本通(1213:八皇后问题)
  7. java border边框_简单实用的css边框属性border
  8. 谷歌修复已遭利用的 Chrome 0day
  9. 生物统计分析之主成分分析(PCA)
  10. python爬虫框架论文开题报告范文_研究思路及框架--开题报告
  11. “茴”字有四种写法,广发有三种分期;你都知道吗?
  12. Win10系统异常应该怎么修复
  13. android 修改软件图标大小,android – 是否可以在EditText中更改图标的大小
  14. 分析Padavan的代码一
  15. Codeup100000609问题 A: Jugs
  16. java怎么绘画坦克_坦克游戏教程一:使用java绘图功能绘制简单坦克
  17. 鸡兔同笼,今又鸡和兔关在一个笼子里面,动物的头的总数是35,动物的脚的总数是94,问你鸡和兔子各有多少只?提示:利用二重循环解决问题
  18. Java基础の乱弹琴二:break关键字
  19. 猿创征文丨深度学习基于双向LSTM模型完成文本分类任务
  20. 如何用 LiquidText 高效阅读分析文献?

热门文章

  1. 关闭数字健康 android 魅族,魅族Flyme数字健康,手机使用情况尽收眼底,还能限制使用!...
  2. 解决install sass-loader 引入 ,版本过高问题
  3. 2019.09.21 多校联合训练(提高组)
  4. 初入算法———高斯算法
  5. linux 开启LACP 单端口,Linux 网桥支持LACP 报文透传的解决方法
  6. npm 配置淘宝镜像
  7. Unity-动作系统-案例学习(4)人物受伤和死亡
  8. mac输入拼音的方法
  9. win7 万能驱动 win8 万能驱动
  10. oracle可以更改表名,sql – 更改Oracle表名