文章目录

  • 前言
  • 一、MATLAB神经网络工具箱的调用——BP神经网络
  • 二、BP神经网络函数化表示
    • 1.函数表示
    • 2.归一化的修正
  • 三、BP神经网络梯度\求导函数
  • 总结

前言

在学习编写ADP算法程序时,需要用到神经网络以及神经网络的梯度,原本想采用自编神经网络函数,但训练的特别麻烦,还需要写收敛算法,用牛顿方法或最小二乘方法,精度和效果也不好。所以,研究了一下如何利用MATLAB的神经网络工具箱进行训练,并且如何写出训练好的BP神经网络函数,以及如何写出其导数。


一、MATLAB神经网络工具箱的调用——BP神经网络

采用代码的方式创建神经网络。
数据集为x,写成行向量的形式(每个xix_ixi​数据是列向量,以[x1,x2,...,xn][x_1,x_2,...,x_n][x1​,x2​,...,xn​]的形式拼在一起);
结果为u,也要写成行向量的形式。

%% 搭建网络
net = newff(x, u, 8, {'tansig', 'purelin'},'trainlm');   % 建立BP神经网络,8个隐藏层节点,激活函数为tansig形式
%% 网络参数
net.trainParam.show = 10;      % 每10轮回显示一次结果
net.trainParam.epochs = 5000;  % 最大训练次数
net.trainParam.lr = 0.02;      % 网络的学习速率
net.trainParam.goal = 1e-5;    % 训练网络所要达到的目标误差
net.divideFcn = '';            % 网络误差如果连续6次迭代都没变化,则matlab会默认终止训练。为了让程序继续运行,用以下命令取消这条设置
%% 训练
net = train(net, x, u,'useGPU','only');        % 调用GPU加快训练速度

二、BP神经网络函数化表示

1.函数表示

设计的BP神经网络可以表示为如下形式

FN=W2tanh⁡(W1X+B1)+B2{F_N} = {W_2}\tanh \left( {{W_1}X + {B_1}} \right) + {B_2}FN​=W2​tanh(W1​X+B1​)+B2​

代码如下所示:

%% 从神经网络工具箱中获取训练好的参数
w1 = net.iw{1,1};
b1 = net.b{1};
w2 = net.lw{2,1};
b2 = net.b{2};
z_n = purelin(w2*tansig(w1*x_n + b1) + b2);      % 神经网络拟合函数 记为(a)

可以注意到这里输入和输出分别是x_n和z_n,这是因为在新版的神经网络工具箱中会自动自动对输入和输出的数据进行归一化,x_n和z_n是归一化后的结果。

2.归一化的修正

归一化采用的是mapminmax()函数。
输入是x,归一化后的输出是y,归一化的区间是 [−1,1][-1,1][−1,1],归一化的公式如下所示:
y=(ymax−ymin)∗(x−xmin)/(xmax−xmin)+ymin;y = (y_{max}-y_{min})*(x-x_{min})/(x_{max}-x_{min}) + y_{min};y=(ymax​−ymin​)∗(x−xmin​)/(xmax​−xmin​)+ymin​;
在mapminmax()提供的参数中可以表示为:
xn=(x−xoffset)∗k−1;x_n = (x -x_{offset})*k - 1;xn​=(x−xoffset​)∗k−1;
所以将上面代码的最后一句(a)替换为进行归一化后的代码,如下所示:

%% 这是只是求神经网络工具箱归一化的参数,并不作为训练的输入
[x_, inputStr1] = mapminmax(x);        % 输入
[u_, outputStr1] = mapminmax(u);   % 结果
%% 取出归一化的参数
k1 = inputStr1.gain;
k2 = outputStr1.gain;
off1 = inputStr1.xoffset;
off2 = outputStr1.xoffset;
%% 函数表达
x_n = (x - off1).*k1 - 1;
z_n = purelin(w2*tansig(w1*x_n + b1) + b2);      % 神经网络拟合函数
z = (z_n + 1)./k2 + off2;

这就实现了BP神经网络的函数化表示。
FN′=W2{W1[1−tanh⁡(W1X+B1)⋅×tanh⁡(W1X+B1)]}\begin{array}{rl} F_{N}^{\prime}=W_{2}\left\{W_{1}\left[1-\tanh \left(W_{1} X+B_{1}\right) \cdot \times \tanh \left(W_{1} X+B_{1}\right)\right]\right\} \end{array}FN′​=W2​{W1​[1−tanh(W1​X+B1​)⋅×tanh(W1​X+B1​)]}​

三、BP神经网络梯度\求导函数

BP神经网络的梯度表达为:
FN′=W2{W1[1−tanh⁡(W1X+B1)⋅×tanh⁡(W1X+B1)]}\begin{array}{rl} F_{N}^{\prime}=W_{2}\left\{W_{1}\left[1-\tanh \left(W_{1} X+B_{1}\right) \cdot \times \tanh \left(W_{1} X+B_{1}\right)\right]\right\} \end{array}FN′​=W2​{W1​[1−tanh(W1​X+B1​)⋅×tanh(W1​X+B1​)]}​
但这里也要注意归一化,故修正为:
FN′=W2{(W1⋅×K1T)[1−tanh⁡(W1X+B1)⋅×tanh⁡(W1X+B1)]}\begin{array}{rl} F_{N}^{\prime}=W_{2}\left\{(W_{1}\cdot \times K_1^T)\left[1-\tanh \left(W_{1} X+B_{1}\right) \cdot \times \tanh \left(W_{1} X+B_{1}\right)\right]\right\} \end{array}FN′​=W2​{(W1​⋅×K1T​)[1−tanh(W1​X+B1​)⋅×tanh(W1​X+B1​)]}​

导数的拟合效果确实差了一些,在数据足够多的时候,还是比较接近的。

全部代码放在了文件全部的BP网络函数化的程序中。


总结

尝试了BP神经网络函数化表示,并推导出BP神经网络梯度\求导函数。

MATLAB神经网络工具箱 BP神经网络函数化表示 BP神经网络梯度\求导函数相关推荐

  1. MATLAB中内置的BP神经网络函数 help newff翻译【学习笔记】

    MATLAB中内置的BP神经网络函数 help翻译 原文请参考:help newff newff 创建前馈反向传播网络. 在 R2010b NNET 7.0 中已过时. 最后在 R2010a NNET ...

  2. 全连接神经网络的BP算法(BP神经网络模型)与卷积神经网络的BP算法

    1.神经网络模型 1.1神经网络模型的演变: 神经元模型------->感知机模型------->神经网络模型 神经元模型:1943年,W.S.McCulloch和W.Pitts根据生物学 ...

  3. matlab神经网络工具箱实现两个输入的BP神经网络

    请问各位大佬,matlab神经网络工具箱怎么实现具有两个特征的BP神经网络啊?是将以行为单位将每个样本的每一个特征按列存放就可以吗?

  4. matlab 有理逼近,BP神经网络函数逼近

    模糊神经网络函数逼近 ====比较简单,直接贴出来就好 % 利用BP网络实现函数逼近 clear % NEWFF--生成一个新的前向神经网络 %TRAIN---对BP网络进行训练 % SIM----对 ...

  5. matlab 求obb,实验六MATLAB神经网络工具箱DOC

    实验六MATLAB神经网络工具箱DOC 实验七MATLAB神经网络工具箱一.实验目的1.掌握 Matlab 对感知器网络的构建与训练方法.2.掌握 Matlab 对线性神经网络的构建与训练方法.3.掌 ...

  6. 基于遗传算法的BP神经网络优化算法(GA BP)实用算例

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.工程背景 二.代码(部分) 1.引入库 2.读入数据 进化过程 注意 具体安装步骤 声明 前言 基于遗传算法的BP ...

  7. nntool神经网络工具箱的图形用户界面

    在前面我们之前讲过神经网络拟合工具nftool的使用,连接如下 神经网络拟合工具箱nftool的使用 神经网络的工具箱有如下几种: nntool神经网络工具箱的图形用户界面. nftool是神经网络拟 ...

  8. 基于遗传算法的BP神经网络优化

    基于遗传算法的BP神经网络优化 1 前言 BP神经网络是人工神经网络中应用最广泛的算法,但是也存在一些缺陷,例如学习收敛速度太慢,不能保证收敛到全局最小点.网络结构不易确定.另外,网络结构.初始连接权 ...

  9. 如何利用matlab做BP神经网络分析(包括利用matlab神经网络工具箱)

    如何利用matlab做BP神经网络分析(包括利用matlab神经网络工具箱) 转载:https://blog.csdn.net/xgxyxs/article/details/53265318 最近一段 ...

  10. 利用MATLAB 2016a进行BP神经网络的预测(含有神经网络工具箱)

    最近一段时间在研究如何利用预测其销量个数,在网上搜索了一下,发现了很多模型来预测,比如利用回归模型.时间序列模型,GM(1,1)模型,可是自己在结合实际的工作内容,发现这几种模型预测的精度不是很高,于 ...

最新文章

  1. 讯飞语音的中的bug用户校验失败
  2. 如何优雅地使用pdpipe与Pandas构建管道?
  3. SQL Server故障排除圣经
  4. jQuery用于请求服务器的函数
  5. JavaScript的方法和技巧
  6. 【深度学习】重新思考BatchNorm中的 “Batch”
  7. python 获取文件名_真实需求 | Python+os+openpyxl 批量获取Excel的文件名和最大行数...
  8. Linux系统编程——线程池
  9. 英文文本分析:与COVID-19有关的论文文本分析
  10. cte公用表表达式_在SQL Server中使用CTE进行插入和更新(公用表表达式)
  11. 基于进程的游戏Server端架构设计
  12. 计算机高特效吃鸡游戏主机配置单,畅玩主流游戏吃鸡LOL组装电脑配置清单
  13. Python读取scel文件
  14. 如何在64位win7中使用未有签名的驱动程序
  15. TensorFlow Serving 使用 及 部署
  16. RTSP协议视频安防综合管理平台EasyNVR与海康萤石云平台运行机制差异对比说明
  17. yolov4_u5版复现—3. 数据读入 dataset.py
  18. 通过Web Service实现IP地址查询功能
  19. 小学计算机神奇的因特网教案,小学信息技术第三册全册教案(第一单元 神奇的动画城)...
  20. GUID MBR新一代分区表 DiskGenius

热门文章

  1. 华为项目CMO(CIE)的经历,对软件工程敏捷开发的实践
  2. ruby 从入门到放弃-第一节-hello world
  3. [SUCTF 2019]EasyWeb---无参数RCE
  4. python百度贴吧发帖签到_Python实例 | 贴吧签到
  5. YOLOv3 网络结构
  6. Allegrocadence PCB测量时显示两种单位(mil mm)
  7. js将阿拉伯数字转换成大写金额
  8. android 背景渐变颜色代码,Android开发——实现背景颜色渐变效果
  9. java实训报告范文_java个人实训总结范文
  10. 1、STVD和STVP的使用及串口烧写程序教程