55、定义浅层神经网络架构和算法(matlab)

news2024/10/6 2:41:41

1、定义浅层神经网络架构和算法简介

浅层神经网络是一种简单的神经网络结构,通常只包含一个输入层、一个或多个隐藏层和一个输出层。在训练时,通过反向传播算法来不断调整神经元之间的连接权重,从而实现对输入数据的分类、回归等任务。

一个简单的浅层神经网络可以使用MATLAB实现,可以使用MATLAB中的神经网络工具箱来构建神经网络模型,并用反向传播算法来训练模型。下面是一个简单的浅层神经网络的MATLAB代码示例:

% 创建一个2-3-1的浅层神经网络 
net = feedforwardnet([3]); % 设置训练参数 
net.trainParam.epochs = 1000; % 训练次数 
net.trainParam.lr = 0.01; % 学习率

 % 生成训练数据 
X = rand(2, 100); % 输入数据 
Y = X(1, :) + 2*X(2, :); % 输出数据 % 开始训练神经网络 
net = train(net, X, Y); % 使用训练后的神经网络进行预测 
output = net(X); % 显示预测结果 disp(output);

在这个示例中,我们创建了一个2-3-1的神经网络结构,其中输入层有两个神经元,隐藏层有3个神经元,输出层有一个神经元。然后我们使用随机生成的训练数据来训练神经网络,并使用训练后的神经网络进行预测。

通过简单的神经网络模型和MATLAB代码,我们可以很容易地实现浅层神经网络的训练和预测任务。

2、创建神经网络对象

1)说明

使用网络创建函数:使用命令 feedforwardnet 创建一个简单的两层前馈网络
简要说明了网络对象,它用于存储定义神经网络的所有信息。
网络对象的关键子对象包括 inputs、layers、outputs、biases、inputWeights 和 layerWeights。

2)创建网络代码

net = feedforwardnet

net =

    Neural Network
 
              name: 'Feed-Forward Neural Network'
          userdata: (your custom info)
 
    dimensions:
 
         numInputs: 1
         numLayers: 2
        numOutputs: 1
    numInputDelays: 0
    numLayerDelays: 0
 numFeedbackDelays: 0
 numWeightElements: 10
        sampleTime: 1
 
    connections:
 
       biasConnect: [1; 1]
      inputConnect: [1; 0]
      layerConnect: [0 0; 1 0]
     outputConnect: [0 1]
 
    subobjects:
 
             input: Equivalent to inputs{1}
            output: Equivalent to outputs{2}
 
            inputs: {1x1 cell array of 1 input}
            layers: {2x1 cell array of 2 layers}
           outputs: {1x2 cell array of 1 output}
            biases: {2x1 cell array of 2 biases}
      inputWeights: {2x1 cell array of 1 weight}
      layerWeights: {2x2 cell array of 1 weight}
 
    functions:
 
          adaptFcn: 'adaptwb'
        adaptParam: (none)
          derivFcn: 'defaultderiv'
         divideFcn: 'dividerand'
       divideParam: .trainRatio, .valRatio, .testRatio
        divideMode: 'sample'
           initFcn: 'initlay'
        performFcn: 'mse'
      performParam: .regularization, .normalization
          plotFcns: {'plotperform', plottrainstate, ploterrhist,
                    plotregression}
        plotParams: {1x4 cell array of 4 params}
          trainFcn: 'trainlm'
        trainParam: .showWindow, .showCommandLine, .show, .epochs,
                    .time, .goal, .min_grad, .max_fail, .mu, .mu_dec,
                    .mu_inc, .mu_max
 
    weight and bias values:
 
                IW: {2x1 cell} containing 1 input weight matrix
                LW: {2x2 cell} containing 1 layer weight matrix
                 b: {2x1 cell} containing 2 bias vectors
 
    methods:
 
             adapt: Learn while in continuous use
         configure: Configure inputs & outputs
            gensim: Generate Simulink model
              init: Initialize weights & biases
           perform: Calculate performance
               sim: Evaluate network outputs given inputs
             train: Train network with examples
              view: View diagram
       unconfigure: Unconfigure inputs & outputs
 
    evaluate:       outputs = net(inputs)

3) 查看第一层的 layers 子对象

说明:一个层中神经元的数量由其 size 属性给出
该层有 10 个神经元,这是 feedforwardnet 命令的默认大小。net 输入函数是 netsum(求和),传递函数是 tansig。

代码

net.layers{1}

ans = 

    Neural Network Layer
 
              name: 'Hidden'
        dimensions: 10
       distanceFcn: (none)
     distanceParam: (none)
         distances: []
           initFcn: 'initnw'
       netInputFcn: 'netsum'
     netInputParam: (none)
         positions: []
             range: [10x2 double]
              size: 10
       topologyFcn: (none)
       transferFcn: 'tansig'
     transferParam: (none)
          userdata: (your custom info)

 4)查看 layerWeights 子对象以了解层 1 和层 2 之间的权重

 代码

net.layerWeights{2,1}

ans = 

    Neural Network Weight

            delays: 0
           initFcn: (none)
      initSettings: .range
             learn: true
          learnFcn: 'learngdm'
        learnParam: .lr, .mc
              size: [0 10]
         weightFcn: 'dotprod'
       weightParam: (none)
          userdata: (your custom info)

 3、配置浅层神经网络输入和输出

1)说明

在创建神经网络后,必须对其进行配置。配置步骤包括检查输入和目标数据,设置网络的输入和输出大小以匹配数据,以及选择能够实现最佳网络性能的输入和输出处理设置。配置步骤通常在调用训练函数时自动完成。但也可以使用配置函数手动完成配置步骤之前创建的网络配置为逼近一个正弦函数

2)configure 函数可以设置网络输入和输出大小以匹配数据。

代码

p = -2:.1:2;
t = sin(pi*p/2);
net1 = configure(net,p,t);

3) 再次查看层 1 和层 2 之间的权重,可以看到权重的维度是 1×20。

代码

net1.layerWeights{2,1}

ans = 

    Neural Network Weight

            delays: 0
           initFcn: (none)
      initSettings: .range
             learn: true
          learnFcn: 'learngdm'
        learnParam: .lr, .mc
              size: [1 10]
         weightFcn: 'dotprod'
       weightParam: (none)
          userdata: (your custom info)

 4、理解浅层网络数据结构

1)说明

输入数据结构的格式影响网络模拟,它从静态网络开始,然后继续到动态网络。
有两种基本类型的输入向量:并发发生的(在同一时间,或没有特定的时间顺序)和按时间顺序发生的输入向量。对于并发向量,顺序并不重要,如果有多个网络并行运行,您可以为每个网络提供一个输入向量。对于顺序向量,向量出现的顺序很重要。

2)静态网络中并发输入的仿真

说明:模拟网络最简单的情况是,要模拟的网络是静态的(没有反馈或延迟)。在这种情况下,不需要关心输入向量是否以特定的时间序列出现,因此可以将输入视为并发的。此外,如果假设网络只有一个输入向量,问题会变得更加简单。

设置一个线性前馈网络代码

net = linearlayer;
net.inputs{1}.size = 2;
net.layers{1}.dimensions = 1;

 权重矩阵和偏置设为W = [1 2], b =[0]代码

net.IW{1,1} = [1 2];
net.b{1} = 0;

假设网络仿真数据集由Q = 4个并发向量组成代码

P = [1 2 2 3; 2 1 3 1];

模拟网络代码

说明:将单个并发向量矩阵提供给网络,网络产生单个并发向量矩阵作为输出。如果有四个网络并行运行,每个网络接收一个输入向量并产生一个输出,结果将是相同的。输入向量的顺序并不重要,因为它们不相互作用。

A = net(P)
A =

     5     4     8     5

 5、动态网络中时序输入的仿真

1)说明

当网络包含延迟时,网络的输入通常是按一定时间顺序出现的一系列输入向量

2)创建该网络代码

net = linearlayer([0 1]);
net.inputs{1}.size = 1;
net.layers{1}.dimensions = 1;
net.biasConnect = 0;

3)赋权矩阵代码

net.IW{1,1} = [1 2];

 4)输入序列代码

P = {1 2 3 4};

 5)模拟网络代码

说明:输入一个包含输入序列的单元格数组,网络产生一个包含输出序列的单元格数组

A = net(P)

6、动态网络中并发输入的仿真

说明:将相同的输入作为一组并发输入而不是输入序列应用,将获得完全不同的响应。就好像每个输入都被并发地应用到一个单独的并行网络中。对于前面的示例,在动态网络中使用顺序输入进行仿真

1)代码

P = [1 2 3 4];

2)模拟网络代码

A = net(P)
A =
     1     2     3     4

3)网络提供一组并发序列代码

P = {[1 4] [2 3] [3 2] [4 1]};

4)模拟网络代码

A = net(P)
A = {[1 4] [4 11] [7 8] [10 5]}

7、总结

浅层神经网络是一种简单的神经网络结构,通常只包含一个输入层、一个或多个隐藏层和一个输出层。在MATLAB中,可以使用神经网络工具箱来构建和训练浅层神经网络模型。

在MATLAB中,可以使用以下步骤来构建和训练浅层神经网络模型:

  1. 创建神经网络对象:使用feedforwardnet函数创建一个浅层神经网络对象,指定每个隐藏层中神经元的数量。

  2. 设置训练参数:通过修改神经网络对象的trainParam属性设置训练参数,如训练次数、学习率等。

  3. 准备训练数据:准备输入数据和对应的输出数据,用于训练神经网络模型。

  4. 训练神经网络:调用train函数,传入训练数据进行神经网络的训练,调整连接权重。

  5. 使用神经网络进行预测:训练完成后,可以使用训练好的神经网络对象对新的输入数据进行预测。

通过以上步骤,我们可以在MATLAB中构建和训练简单的浅层神经网络模型,用于解决分类、回归等问题。神经网络工具箱提供了丰富的函数和工具,使得构建和训练神经网络变得简单而有效。

8、源代码

代码

%% 定义浅层神经网络架构和算法
%% 自定义神经网络
%% 1)创建神经网络对象
%使用网络创建函数//使用命令 feedforwardnet 创建一个简单的两层前馈网络
%简要说明了网络对象,它用于存储定义神经网络的所有信息。
%网络对象的关键子对象包括 inputs、layers、outputs、biases、inputWeights 和 layerWeights。

net = feedforwardnet
%查看第一层的 layers 子对象
%一个层中神经元的数量由其 size 属性给出
%该层有 10 个神经元,这是 feedforwardnet 命令的默认大小。net 输入函数是 netsum(求和),传递函数是 tansig。例如,如果您要将传递函数更改为 logsig,可以执行以下命令:
%net.layers{1}.transferFcn = 'logsig';
net.layers{1}
%查看 layerWeights 子对象以了解层 1 和层 2 之间的权重
net.layerWeights{2,1}

%% 2) 配置浅层神经网络输入和输出
%在创建神经网络后,必须对其进行配置。配置步骤包括检查输入和目标数据,设置网络的输入和输出大小以匹配数据,以及选择能够实现最佳网络性能的输入和输出处理设置。配置步骤通常在调用训练函数时自动完成。但也可以使用配置函数手动完成配置步骤
%之前创建的网络配置为逼近一个正弦函数
%configure 函数可以设置网络输入和输出大小以匹配数据。
p = -2:.1:2;
t = sin(pi*p/2);
net1 = configure(net,p,t);
%再次查看层 1 和层 2 之间的权重,可以看到权重的维度是 1×20。
net1.layerWeights{2,1}
%输入设置
net1.inputs{1}

%% 3)理解浅层网络数据结构
%输入数据结构的格式影响网络模拟,它从静态网络开始,然后继续到动态网络。
%有两种基本类型的输入向量:并发发生的(在同一时间,或没有特定的时间顺序)和按时间顺序发生的输入向量。对于并发向量,顺序并不重要,如果有多个网络并行运行,您可以为每个网络提供一个输入向量。对于顺序向量,向量出现的顺序很重要。
%%   静态网络中并发输入的仿真
%模拟网络最简单的情况是,要模拟的网络是静态的(没有反馈或延迟)。在这种情况下,不需要关心输入向量是否以特定的时间序列出现,因此可以将输入视为并发的。此外,如果假设网络只有一个输入向量,问题会变得更加简单。
%设置一个线性前馈网络
net = linearlayer;
net.inputs{1}.size = 2;
net.layers{1}.dimensions = 1;
%权重矩阵和偏置设为W = [1 2], b =[0]。
net.IW{1,1} = [1 2];
net.b{1} = 0;
%假设网络仿真数据集由Q = 4个并发向量组成
P = [1 2 2 3; 2 1 3 1];
%模拟网络
%将单个并发向量矩阵提供给网络,网络产生单个并发向量矩阵作为输出。如果有四个网络并行运行,每个网络接收一个输入向量并产生一个输出,结果将是相同的。输入向量的顺序并不重要,因为它们不相互作用。
A = net(P)
%%  动态网络中时序输入的仿真
%当网络包含延迟时,网络的输入通常是按一定时间顺序出现的一系列输入向量
%创建该网络
net = linearlayer([0 1]);
net.inputs{1}.size = 1;
net.layers{1}.dimensions = 1;
net.biasConnect = 0;
%赋权矩阵
net.IW{1,1} = [1 2];
%输入序列
P = {1 2 3 4};
%模拟网络
%输入一个包含输入序列的单元格数组,网络产生一个包含输出序列的单元格数组
A = net(P)
%% 动态网络中并发输入的仿真
%将相同的输入作为一组并发输入而不是输入序列应用,将获得完全不同的响应。就好像每个输入都被并发地应用到一个单独的并行网络中。对于前面的示例,在动态网络中使用顺序输入进行仿真
P = [1 2 3 4];
%模拟网络
A = net(P)
%网络提供一组并发序列
P = {[1 4] [2 3] [3 2] [4 1]};
%模拟网络
A = net(P)

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1903898.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rufus-4.5 制作 Clonezilla(再生龙)启动盘报syslinux-6.04下载错误

1、官网下载rufus 官网下载rufus-4.5,下载地址:https://rufus.ie/downloads/ 2、下载再生龙(Clonezilla) 下载最新版本: Clonezilla live 版本: 3.1.2-22:https://sourceforge.net/projects/clonezill…

在 Docker 容器中运行 Vite 开发环境,有这两个问题要注意

容器化开发给我们带来了很多便捷,但是在开发环境下也有一些问题要注意,如果不解决这些问题,你的开发体验不会很好。 容器启动正常,却无法访问 我们用 Docker 启动一个 Vite Vue3 项目的开发环境后,发现端口日志一切…

Springboot使用WebSocket发送消息

1. 创建springboot项目&#xff0c;引入spring-boot-starter-websocket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>完整项目依赖 <?xml ver…

【游戏客户端】大话版本slg玩法正式上线~~

【游戏客户端】制作率土之滨Like玩法 大家好&#xff0c;我是Lampard家杰~~ 好久好久没有更新博客了&#xff0c;有不少大佬都在后台私信我催更&#xff0c;但是很悲伤这段时间都忙的不行QAQ 那在忙什么呢&#xff1f;就是在制作一个SLG类的玩法【帮派纷争】啦 &#xff0c;布…

RNN、LSTM与GRU循环神经网络的深度探索与实战

循环神经网络RNN、LSTM、GRU 一、引言1.1 序列数据的迷宫探索者&#xff1a;循环神经网络&#xff08;RNN&#xff09;概览1.2 深度探索的阶梯&#xff1a;LSTM与GRU的崛起1.3 撰写本博客的目的与意义 二、循环神经网络&#xff08;RNN&#xff09;基础2.1 定义与原理2.1.1 RNN…

java 闭锁(CountDownLatch)

闭锁&#xff08;CountDownLatch&#xff09;是Java中的一个同步辅助类&#xff0c;用于协调多个线程之间的协作。它允许一个或多个线程等待&#xff0c;直到在其他线程中执行的一组操作完成。闭锁非常适用于需要等待一组事件发生之后再执行某些操作的场景。 import java.uti…

【Java】垃圾回收学习笔记(二):分代假说与垃圾回收算法

文章目录 0. 分代收集理论分代假说分代GC定义 1. 垃圾回收算法1.1 标记清除&#xff08;Mark-Sweep&#xff09;算法优点缺点 1.2 标记复制算法优点缺点为什么是8:1:1&#xff1f; 1.3 标记整理算法优点缺点 2. 是否移动&#xff1f; 0. 分代收集理论 分代假说 现在多数JVM G…

Python编程学习笔记(2)--- 列表简介

1、列表是什么 列表由一系列按特定顺序排列的元素组成。可以创建包含字母表中所有字母、数字、0~9或所有家庭成员姓名的列表&#xff1b;也可以将任何东西加入列表中&#xff0c;其中的元素之间可以没有任何关系。列表通常包含多个元素&#xff0c;因此给列表指定一个表示复数…

python库(6):Pygments库

1 Pygments介绍 在软件开发和文档编写中&#xff0c;代码的可读性是至关重要的一环。无论是在博客文章、技术文档还是教程中&#xff0c;通过代码高亮可以使程序代码更加清晰和易于理解。而在Python世界中&#xff0c;Pygments库就是这样一个强大的工具&#xff0c;它能够将各…

1.2 如何让机器说人话?万字长文回顾自然语言处理(NLP)的前世今生 —— 《带你自学大语言模型》系列

本系列目录 《带你自学大语言模型》系列部分目录及计划&#xff0c;完整版目录见&#xff1a;带你自学大语言模型系列 —— 前言 第一部分 走进大语言模型&#xff08;科普向&#xff09; 第一章 走进大语言模型 1.1 从图灵机到GPT&#xff0c;人工智能经历了什么&#xff1…

Powershell 获取电脑保存的所有wifi密码

一. 知识点 netsh wlan show profiles 用于显示计算机上已保存的无线网络配置文件 Measure-Object 用于统计数量 [PSCustomObject]{ } 用于创建Powershell对象 [math]::Round 四舍五入 Write-Progress 显示进度条 二. 代码 只能获取中文Windows操作系统的wifi密码如果想获取…

【绿色版】Mysql下载、安装、配置与使用(保姆级教程)

大家都知道&#xff0c;Mysql安装版的卸载过程非常繁琐&#xff0c;而且卸载不干净会出现许多问题&#xff0c;很容易让大家陷入重装系统的窘境。基于此&#xff0c;博主今天给大家分享绿色版Mysql的安装、配置与使用。 目录 一、Mysql安装、配置与使用 1、下载解压 2、创建…

02STM32软件安装新建工程

STM32软件安装&新建工程 1.软件安装&#xff1a;1.1Keil5 MDK安装1.2安装器件支持包离线安装支持包在线安装支持包 1.3软件注册&#xff1a;1.4安装驱动STLINK驱动JLink驱动在此文件夹下USB转串口 2开发方式&新建工程步骤&架构个人心得 1.软件安装&#xff1a; 安…

stm32精密控制步进电机(基础篇)

众所周知&#xff0c;步进电机由于使用脉冲控制&#xff0c;会比直流电机的控制稍难一些&#xff0c;但开环控制时也更加稳定。 落到做项目的时候&#xff0c;目前来说我都会先考虑步进电机&#xff0c;再去考虑直流&#xff0c;无刷这样的电机。包括毕设时所用的机械臂也是用…

Linux开发讲课33---线程实现与线程控制步骤简析

线程概述 进程是系统中程序执行和资源分配的基本单位。 每个进程都拥有自己的数据段、代码段和堆栈段&#xff0c;这就造成了进程在进行切换等操作时都需要有比较负责的上下文切换等动作。为了进一步减少处理机的空转时间支持多处理器和减少上下文切换开销&#xff0c;进程在演…

Java基础-内部类与异常处理

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、Java 内部类 什么是内部类&#xff1f; 使用内部类的优点 访问局部变量的限制 内部类和继承 内部…

一位3D打印工程师繁忙的一天

早晨&#xff1a;准备与规划 7:00 AM - 起床与晨练 3D打印工程师早起进行晨练&#xff0c;如跑步或瑜伽&#xff0c;以保持身心健康。晨练后&#xff0c;享用一顿健康的早餐&#xff0c;为一天的繁忙工作做好准备。 8:00 AM - 检查邮件和项目进展 在开始工作前&#xff0c;先…

封装了一个仿照抖音效果的iOS评论弹窗

需求背景 开发一个类似抖音评论弹窗交互效果的弹窗&#xff0c;支持滑动消失&#xff0c; 滑动查看评论 效果如下图 思路 创建一个视图&#xff0c;该视图上面放置一个tableView, 该视图上添加一个滑动手势&#xff0c;同时设置代理&#xff0c;实现代理方法 (BOOL)gestur…

Zkeys三方登录模块支持QQ、支付宝登录

1&#xff0c;覆盖到根目录&#xff0c;并导入update.sql数据库文件到Zkeys数据库里 2. 后台系统权限管理&#xff0c;配置管理员权限-系统类别-找到云外科技&#xff0c;全部打勾 3&#xff0c;后台系统设置找到云外快捷登录模块填写相应的插件授权配置和登录权限配置&#x…

【python中级】图像从从笛卡尔坐标系转换为极坐标系

【python中级】图像从从笛卡尔坐标系转换为极坐标系 1.背景2.生成二维图3.极坐标转换1.背景 笛卡尔坐标系就是我们常说的直角坐标系。 笛卡尔坐标系,也称为直角坐标系,是由法国数学家和哲学家勒内笛卡尔(Ren Descartes)发明的一种二维或三维坐标系统。它使用两个或三个相互…