MATLAB神经网络编程(四)——线性神经网络的实现与局限

2023-11-01

**MATLAB神经网络编程》 化学工业出版社 读书笔记
第四章 前向型神经网络 4.2 线性神经网络**

本文是《MATLAB神经网络编程》书籍的阅读笔记,其中涉及的源码、公式、原理都来自此书,若有不理解之处请参阅原书。


一,线性神经网络的实现。

线性神经网络在模式识别、信号滤波和预测、函数逼近等方面有广泛的用途,下面用实例来说明线性神经网络的MATLAB仿真程序设计。

1,线性神经网络在模式分类中的应用。
【例4-16】一单层线性神经网络模拟与函数。

根据与函数的性质,与函数是一个简单的线性划分问题,用一个线性神经元构成的网络就可以实现。基本结构:

  • 网络有一个输入向量,包括2个元素,输入元素的取值范围[0 1]
  • 输出有一个元素,为二值变量0或1
    设计的线性神经网络的结构示意图如下:

    16

源代码:

clear all;
%设计线性神经网络
p=[0 0;0 1;1 0;1 1]';   %输入向量
t=[0 0 0 1];       %输出向量
net=newlind(p,t)    %设计线性神经网络
w=net.iw{1}
b=net.b{1};
%线性神经网络的仿真
a=sim(net,p)     %输出仿真结果
y=a>0.5      %将模拟仿真结果转换为数字量

输出为:


w =

    0.5000    0.5000


b =

   -0.2500


a =

   -0.2500    0.2500    0.2500    0.7500


y =

     0     0     0     1

2,线性神经网络在噪声对消中的应用。

【例4-17】(以自适应线性神经网络实现噪声对消)对于一个最优的滤波器希望通过滤波将信号中的噪声去掉,这对于一般的滤波器来说很难完全做到。利用自适应线性神经网络实现噪声对消的原理:

24

上图中s为原始输入信号,假设为平稳的零均值随机信号;n0为与s不相关的随机噪声;
n1为与n0相关的信号;系统输出为ε;s+n0为ADALINE神经元的预期输出;y为ADALINE神经元的输出。则:

ε=s+n0-y

可知当y->n0时ε=s

关于噪声对消的原理可以参考文档:http://www.doc88.com/p-5718140232621.html
http://www.docin.com/p-376010503.html

源代码:

clear all;
%定义输入向量和目标向量
time=0.01:0.01:10;             %时间变量
noise=(rand(1,1000)-0.5)*4;    %随机噪声
input=sin(time);               %输入信号
p=noise;                       %将噪声作为ADALINE的输入向量
t=input+noise;                 %将噪声+信号作为目标向量
                               %创建线性神经网络
net=newlin([-1 1],1,0,0.0005);
%线性神经网络的训练
net.adaptParam.passes=70;
[net,y,output]=adapt(net,p,t);    %output为网络调整过程的误差
%绘制信号
hold on;
subplot(3,1,1);
plot(time,input,'r');
title('信号波形sin(t)');

subplot(3,1,2);
plot(time,t,'m');                  %绘制叠加信号
xlabel('t');
title('随机噪声波形sin(t)+noise(t)');
%绘制输出信号的波形
subplot(3,1,3);
plot(time,output,'b');
xlabel('t');
title('输出信号波形y(t)');

输出结果:

25

3,线性神经网络在信号预测中的应用。

源码:

clear all;
% 定义输入向量和目标向量
time=0.5:0.5:20;         %时间变量
y=(rand(1,40)-0.5)*4;    %定义随机输入信号
p=con2seq(y);            %将随机输入向量转换为串行向量
delays=[1 2];            %定义ADALINE神经元输入延迟量
t=p;                     %定义ADALINE神经元的数目向量
% 创建线性神经网络
net=newlin(minmax(y),1,delays,0.0005);
% 线性神经网络的自适应调整(训练)
net.adaptParam.passes=70;
[net,a,output]=adapt(net,p,t);  %输出信号output为网络调整过程中的误差
% 绘制随机输入信号\输出信号的波形
hold on;
subplot(3,1,1);plot(time,y,'r*-'); %输出信号output为网络调整过程中的误差
xlabel('t','position',[20.5,-1.8]);
ylabel('随机输入信号s(t)');
axis([0 20 -2 2]);
subplot(3,1,2);
output=seq2con(output);
plot(time,output{1},'ko-');  %绘制预测输出信号的波形
xlabel('t','position',[20.5,-1.8]);
ylabel('预测输出信号y(t)');
axis([0 20 -2 2]);
subplot(3,1,3);
e=output{1}-y;
plot(time,e,'k-');   %绘制误差曲线
xlabel('t','position',[20.5,-1.8]);
ylabel('误差曲线e(t)');
axis([0 20 -2 2]);
hold off;

输出:

26
从图上可以看出,输出信号波形与输入信号波形基本一致,误差较小,输出波形较好的预测了输入波形。

值得一提的还是学习速率与训练步长的选择。如果学习速率过大,即学习的过程将不稳定,且误差会更大;反正如果学习速率过小,学习的过程将变慢,需要的训练步长将加大。
就线性神经网络本身来说,其余感知器一样,只能解决线性可分的模式分类,但LMS算法比感知器的δ学习算法更有效,因为它使均方误差最小,可以使各分类模式远离判决边界,从而使网络具有更好 的抗噪性。另一方面,ADALINE网络至今仍然广泛应用于各种实际系统中,特别是在自适应滤波方面,用途更加广泛。

二,线性神经网络的局限性。

线性神经网络只能反映输入和输出样本矢量间的线性映射关系,与感知器一样,其也只能解决线性可分问题。 由于线性神经网络的误差曲面为一个多维抛物面,所以在学习速率足够小的情况下对于基于最下二乘梯度下降原理进行训练的线性神经网络总可以找到一个解。但是,线性神经网络的训练不一定总能达到零误差。如果线性神经网络的自由度(即线性神经网络所有权值和阈值的个数总和)小于训练样本集中”输入-目标“矢量的对数,而且各样本矢量线性无关,则网络训练不可能达到零误差,只能达到一个使网络误差最小的解;反之,如果网络自由度大于样本集的个数,即会得到无穷多个使网络训练误差为零的解。

上述关于自由度判断可以理解为:S*R+S>=Q;此时可以用线性神经网络来解决。
但是当输入样本线性相关或者没有阈值的时候,这个公式不使用。

1,学习速率过大。

学习速率的选取是影响收敛速度以及训练结果的重要因素。学习速率足够小,根据W-H学习规则总能训练网络满足精度要求;学习速率过大,可能会导致训练过程不稳定。MATLAB工具箱提供了函数maxlinlr来求正确的学习速率。
【例4-19】

P=[+1.0 -1.2];
T=[+0.5 +1.0];
w_range=-2:0.4:2;
b_range=-2:0.4:2;
ES=errsurf(P,T,w_range,b_range,'purelin');
plotes(w_range,b_range,ES);
maxlr=maxlinlr(P,'bias');
net=newlin([-2 2],1,[0],maxlr*2.25);
net.trainParam.epochs=20;
net.trainParam.epochs=1;
net.trainParam.show=NaN;
h=plotep(net.IW{1},net.b{1},mse(T-sim(net,P)));
[net,tr]=train(net,P,T);
r=tr;
epoch=1;
while epoch<20
    epoch=epoch+1;
    [net,tr]=train(net,P,T);
    if length(tr.epoch)>1
        h=plotep(net.IW{1,1},net.b{1},tr.perf(2),h);
        r.epoch=[r.epoch epoch];
        r.perf=[r.perf tr.perf(2)];
        v.vperf=[r.vperf NaN];
        r.tperf=[r.tperf NaN];
    else
        break
    end
end
tr=r;
solvednet=newlind(P,T);
hold on;
plot(solvednet.IW{1},solvednet.b{1},'ro')
hold off;
subplot(1,2,2);
plotperf(tr,net.trainParam.goal);
p=-1.2;
a=sim(net,p)

输出:

27

28

输出为:


a =

    2.0913

期望输出t=0.1,而网络输出a=1.0913。可见当学习速率选取过大时,误差越来越大,网络训练无法达到精度。

2,线性相关向量。

在应用线性神经网络之前首先要判断该问题是否能用线性神经网络来解决。通常,线性网络的自由度(权值与阈值总和S*R+S)至少要等于约束的数目(输入/输出样本数Q),这样才能应用。但是当输入样本相关或者没有阈值的时候,这种要求就可能不成立。如果线性相关的输入向量与期望输出向量之间并不匹配,那么此问题就是一个非线性问题,而且这个问题得不到零误差解。

【例4-20】假设输入向量和期望向量如下:
P=[1.0 2.0 3;4 5 6]
T=[0.5 1 -1]
可知输入向量具有相关性,而期望输出向量并不具备这种相关性,即输入/输出不匹配。那么即使有正确的学习速率等参数,结果也不如人意:

P=[1.0 2.0 3.0;4.0 5.0 6.0];
T=[0.5 1.0 -1.0];
maxlr=maxlinlr(P,'bias');
net=newlin([0 10;0 10],1,[0],maxlr);
net.trainParam.show=50;
net.trainParam.epochs=500;
net.trainParam.goal=0.001;
[net,tr]=train(net,P,T);
p=[1.0;4];
a=sim(net,p)

29

输出:

a =
0.8971

达到最大训练次数之后,仿真停止,但是训练精度没有的达到。可以得知:线性网络不能适应输入向量之间具有线性相关性的非线性问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB神经网络编程(四)——线性神经网络的实现与局限 的相关文章

  • Matlab Mex文件编译

    我正在尝试编译一个 mex 文件以在 matlab 中使用套接字连接 问题是它总是说我没有安装sdk或编译器 但我已经安装了 Visual Studio 2010 Express Visual Studio 2012 Express Vis
  • Matlab:保存后翻转图例顺序和图例重叠图

    我正在尝试根据以下内容反转我的图例条目顺序matlab条形图中图例颜色的逆序 https stackoverflow com questions 31178005 reverse ordering of legend colors in m
  • 为什么旋转 3D 点云后顶点法线会翻转?

    我有两个人脸 3D 点云样本 蓝色点云表示目标面 红色点云表示模板 下图显示目标面和模板面在不同方向上对齐 目标面大致沿 x 轴 模板面大致沿 y 轴 Figure 1 The region around the nose is displ
  • 在 MATLAB 中重命名文件

    我正在尝试以编程方式重命名工作目录中的文件a temp txt to b hello txt 您建议如何这样做 MATLAB中有一个简单的文件重命名函数吗 我认为您正在寻找 MOVEFILE
  • 如何在没有安装Visual Studio的另一台机器上使用Visual Studio生成的dll?

    我已经在 Visual Studio 2012 中生成了动态库 我想在另一台机器上使用该库 但我不想在远程机器上安装 Visual Studio 我有 mex 库和 dll 我想运行一个使用这两个库的脚本 当我运行脚本时 出现以下错误 缺少
  • 使用符号求解器仅求解某些变量

    我正在尝试在 MATLAB 中求解包含 3 个变量和 5 个常量的方程组 是否可以使用solve求解三个变量 同时保持常量为符号而不用数值替换它们 当您使用SOLVE http www mathworks com access helpde
  • matlab中类库的全局变量

    我有一些matlab声明的类 我如何声明所有类中都可见的常量 例如 这些常量可以是在所有类的方法中使用的物理常量 首先想到的是使用全局变量 还有更好的办法吗 最好在单独的文件中声明这些常量 包含常量的类是执行此操作的一种很好的干净方法 请参
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和
  • 如何在放置颜色条后保持子图大小不变

    假设我们有一个 1 2 子图 我们在其中绘制了一些图形 如下所示 subplot 1 2 1 surf peaks 20 subplot 1 2 2 surf peaks 20 然后我们要添加一个颜色条 colorbar 我不希望结果中的正
  • 访问图像的 Windows“标签”元数据字段

    我正在尝试进行一些图像处理 所以现在我正在尝试读取图像 exif 数据 有 2 个内置函数可用于读取图像的 exif 数据 问题是我想读取图像标签 exifread and imfinfo这两个函数都不显示图像标签 Is there any
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • “Desort”向量(撤消排序)

    在Matlab中 sort返回排序后的向量和索引向量 显示哪个向量元素已移动到以下位置 v ix sort u Here v是一个包含所有元素的向量u 但已排序 ix是一个向量 显示每个元素的原始位置v in u 使用 Matlab 的语法
  • Matlab 的 imresize 函数中用于插值的算法是什么?

    我正在使用 Matlab Octaveimresize 对给定的二维数组重新采样的函数 我想了解如何使用特定的插值算法imresize works 我在Windows上使用八度 e g A 1 2 3 4 是一个二维数组 然后我使用命令 b
  • 给定协方差矩阵,在Matlab中生成高斯随机变量

    Given a M x M期望的协方差 R 以及所需数量的样本向量 N计算一个N x M高斯随机向量 X在普通 MATLAB 中 即不能使用r mvnrnd MU SIGMA cases 不太确定如何解决这个问题 通常你需要一个协方差并且意
  • 对数据进行分布拟合 - MATLAB

    我正在尝试对从显微镜图像中收集的一些数据进行分布 我们知道 152 左右的峰值是由于泊松过程造成的 我想将分布拟合到图像中心的大密度 同时忽略高强度数据 我知道如何将正态分布拟合到数据 红色曲线 但它不能很好地捕获右侧的重尾 尽管泊松分布应
  • Matlab dec2bin 给出错误的值

    我正在使用 Matlab 的 dec2bin 将十进制数转换为二进制字符串 但是 我得到了错误的结果 例如 gt gt dec2bin 13339262925365424727 ans 101110010001111010010100111
  • 如何将复杂的 csv 文件导入到 Matlab 中的数值向量

    我想知道我们应该如何读取由字符串 双精度数和字符等组成的复杂 csv 文件 例如 您能否提供一个可以在此 csv 文件中提取数值的成功命令 Click here http www ecb europa eu stats money yc d
  • 正确使用 fft2 和 fftshift 进行着色形状

    我正在尝试从 Trucco Verri 文本 3d 计算机视觉入门技术 中看到的着色算法重新创建经典形状 但我很难理解 matlab 中的 fft 函数 本质上 我需要使用可积性约束来获取图像的深度 Z 我不确定在这种情况下何时使用 fft
  • MATLAB 类的 Description 和DetailedDescription 属性

    内置 MATLAB 类具有 Description 和 DetailedDescription 属性的值 gt gt handle ans meta class handle Package meta Properties Name han
  • 在 C++ 中使用 matlab 结构(matlab 函数调用的返回值)(由 matlab 编译器生成的库)

    你好 我有一个相当简单的 matlab 函数 例如 function MYSTRUCT myfunc MYSTRUCT prop1 test MYSTRUCT prop2 foo MYSTRUCT prop3 42 end 我用 matla

随机推荐

  • 2023年十大无代码测试工具 每个测试人员都应该知道

    编码 跟很多技能一样 需要多年的实践才能熟练掌握 让测试人员编写一堆代码组成测试程序 修复程序中的错误 并在几周内完成大量工作很有难度 根据2019 2020年世界质量报告 在敏捷项目中应用自动化测试的最大的问题就是很多测试人员缺乏专业编程
  • 双因素方差分析 matlab,MATLAB的双因素有交互效应的方差分析

    二 MATLAB的双因素有交互效应的方差分析在两个因素的试验中 不但每一个因素单独对试验结果起作用 往往两个因素的不同水平组合还会产生一定的合作效应 在方差分析中称为交互效应 交互效应在对因素方差分析中 通常是当成一个新因素来处理 设因素A
  • Django学习

    创建项目 django admin startproject mysite 目录结构如下 查看帮助 终端页面输入以下命令 django admin help django admin help Type django admin help
  • 缺陷检测数据集

    缺陷检测数据集 东北大学钢材表面缺陷数据集 铁质缺陷 东北大学钢材表面缺陷数据集 简介 该数据集是东北大学宋克臣团队制作而成 是钢材表面缺陷数据集 共有1800张图片 包含六种类型共有六种缺陷 crazing inclusion patch
  • Vue中路由vue-router的使用

    基本使用 1 安装vue router 命令 npm i vue router 2 应用插件 import VueRouter from vue router Vue use VueRouter 3 编写router配置项 import V
  • python中判断 nan 的几种方式

    float NaN 判断 float NaN float NaN pandas中的 nan 判断 pd isnull df1 df1 是DataFrame对象 也可以是Series对象 pd isna 直接判断DataFrame某一列是否为
  • Springboot自定义ThreadPoolTaskExecutor线程池多线程并发执行异步方法

    1 背景 当前因为工作需求 要发送大量Http请求 经过实践遍历发送需要6小时才能发送完毕 如果单线程发送请求会导致主线程阻塞 就会存在以下问题 前端用户等待响应时间过长 无法进行下一步操作 不利于用户操作系统 响应时间过长超过Tomcat
  • 内存分页

    内存分页 p Description 内存分页 p param records 待分页的数据 param pageNum 当前页码 param pageSize 每页显示的条数 return 分页之后的数据 public static
  • Git——C站最详细的Git教程,一篇学会Git(window\linux通用)

    Git C站最详细的Git教程 一篇学会Git window linux通用 文章目录 Git C站最详细的Git教程 一篇学会Git window linux通用 Git简介 Git 作用 为什么要进行源代码管理 Git的诞生 Git管理
  • vue双向数据绑定指令v-model

    vue双向数据绑定指令v model v model 被称为双向数据绑定指令 就是Vue实例对数据进行修改 页面会立即感知 相反页面对数据进行修改 Vue内部也会立即感知 v model 是vue中唯一实现双向数据绑定的指令 v bind
  • mybatis增删改查的写法集合

    增删改查的写法集合 注意 xml文件尽量不要注释 Usermapping public interface UserMapping 查询 List
  • mysql建_mysql简单建表

    NULL 和 NOT NULL 修饰符 可以在每个字段后面都加上这NULL 或 NOT NULL 修饰符来指定该字段是否可以为空 NULL 还是说必须填上数据 NOT NULL MySQL默认情况下指定字段为NULL修饰符 如果一个字段指定
  • 《Kafka系列》Java测试远程连接Kafka,实现生产者和消费者,发现两者数据不通?

    Java测试远程连接Kafka 实现生产者和消费者 发现两者数据不通 错误显示 错误排除 1 在网上看到有这种方法 修改Kafka下的conf下的server properties文件 cd opt apps kafka conf serv
  • Stream流

    概念 是JDK1 8的新语法 和IO流不是一个东西相当于流水线 很方便的对数据进行加工 Stream流把真正的函数式编程风格引入到Java中 代码简洁 Stream流不能直接修改数据源中的数据 不使用Stream流的优势是加工处理数据 每个
  • buuctf_Exec

    0x01 题目链接 BUUCTF在线评测BUUCTF 是一个 CTF 竞赛和训练平台 为各位 CTF 选手提供真实赛题在线复现等服务 https buuoj cn challenges 0x02 题目 打开题目就看到大大的PING 二话不说
  • 在存储过程中使用了DML语句要不要调用COMMIT?

    要调用commit语句 或者正常退出sqlplus 系统会自动提交 dml语句不能自动提交 ddl语句和dcl语句可以自动提交 转自 http bbs csdn net topics 80160481
  • 胶囊体阴影

    官方介绍 虚幻引擎现在支持非常柔滑的间接阴影 由代表角色的胶囊体来进行投影 通常 在受间接光照时 并不会产生阴影 除非是屏幕空间环境遮罩 间接投影需要做的非常柔滑 因为间接光照是来自很多不同的方向 因此 传统的阴影贴图做法的效果并不好 间接
  • android windows 安装

    转自 http www cnblogs com skynet archive 2010 04 12 1709892 html 本系列适合0基础的人员 因为我就是从0开始的 此系列记录我步入Android开发的一些经验分享 望与君共勉 作为A
  • 安防监控视频云存储平台EasyNVR通道频繁离线的原因排查与解决

    安防视频监控汇聚EasyNVR视频集中存储平台 是基于RTSP Onvif协议的安防视频平台 可支持将接入的视频流进行全平台 全终端分发 分发的视频流包括RTSP RTMP HTTP FLV WS FLV HLS WebRTC等格式 为了满
  • MATLAB神经网络编程(四)——线性神经网络的实现与局限

    MATLAB神经网络编程 化学工业出版社 读书笔记 第四章 前向型神经网络 4 2 线性神经网络 本文是 MATLAB神经网络编程 书籍的阅读笔记 其中涉及的源码 公式 原理都来自此书 若有不理解之处请参阅原书 一 线性神经网络的实现 线性