MATLAB神经网络工具箱输入输出预处理相关参数设置

2023-05-16

目录

  • 问题由来
  • 预处理相关属性
    • 预处理函数
    • 预处理参数
    • 修改默认映射变换
      • 通过exampleInput和exampleOutput进行设置
      • 通过configure函数进行设置
  • 结语

问题由来

毕业论文中用到神经网络了,我用的MATLAB的神经网络工具箱nntoolbox去开发。nntoolbox默认会对输入输出进行映射变换,将输入和输出映射到[-1, 1]的区间中,也就是我们常说的“归一化”。这本身是一件好事,因为如果输入输出范围相差很大的话会对训练效果产生不良影响,并且这个过程是由MATLAB自动完成的,十分方便。
但是,我在使用过程中有两种情况需要对此映射做出一些修改:第一是不希望进行映射变换,就是在某些特殊情况下,我希望输入输出就是我的原始数据;第二是nntoolbox默认把训练集作为映射的定义域,在某些情况下,我希望自己定义映射的定义域。在这两个需求的驱动下,对nntoolbox的神经网络配置进行了一番探究,在这里总结一下。

预处理相关属性

nntoolbox生成的network类对象关于输入输出预处理的属性都存放在其中的inputs和outputs属性中,照例还是生成一个net1作为后续的展示对象。

net1 = feedforwardnet(10);

这里net1依然是一个隐含层具有10个节点的两层BP网络。

预处理函数

首先我们来看一下预处理函数,预处理函数的信息存放在

net1.inputs{1, 1}.processFcns

中,回车之后可以看到
在这里插入图片描述
这里表明输入有两个预处理函数,第一个是移除常值,而第二个则是值域映射函数,归一化的主要操作就是由这个mapminmax函数完成。
至于输出的预处理函数,自然也可以通过下面代码来查看。

net1.outputs{1, 2}.processFcns

预处理参数

对于每一个预处理函数,它的相关设置参数可以通过

net1.inputs{1, 1}.processSettings{12}

来查看,因为上面可以看到有两个预处理函数,每个预处理函数的设置都是一个cell元素,所以要查看mapminmax的设置的话需要加上下标{1, 2},回车之后可以看到
在这里插入图片描述
在上述这些参数里面,x表示映射前的数据属性,y表示映射后的数据属性。可以看到,因为目前我们还没有为这个网络配置输入输出,所以包括xrows、xmax、xmin、xrange以及xoffset在内的一系列属性都为空。同时,我们也可以看到,虽然yrows也为0,但是ymin、ymax还有yrange分别被配置成-1,1和2,这说明在默认情况下,输入将会被映射到[-1, 1]这个大小为2的区间中。下面我们尝试为这个网络配置输入输出,看看会发生什么改变。
使用以下语句分别产生输入和输出矢量并利用输入输出矢量对net1进行配置。

t = 0: 0.1: 10;  % 产生输入矢量
y = sin(t);  % 产生输出矢量
net1 = configure(net1, t, y);  % 利用输入输出矢量以及configure函数对net1进行配置

这个时候如果我们再看输入的预处理属性就会发现变成了这样
在这里插入图片描述
可以看到,代表输入侧的x系列属性已经发生了变化,由于我们配置的网络输入是0到10,所以

xmin = 0
xmax = 10
xrange = 10

并且可以留意到最后一个no_change属性也由1变成0,这实际上是一个逻辑变量,0表示输入会发生变化,1表示输入不发生变化。
同样,网络输出的映射变换属性可以通过下列代码查看

net1.outputs{1, 2}.processSettings{1, 2}

修改默认映射变换

看完相关函数和属性,就来到最关键的地方,怎么自定义我自己的映射变换关系呢。
有人可能会说了,刚才的processSettings里面不是有一项no_change属性吗,如果我将它设为1,那不就相当于不让MATLAB去变换了吗。
巧了,我一开始也是这么想的,但是后来发现不行,为什么不行呢,看下面这段话

net.inputs{i}.processSettings (read only)
This property holds a row cell array of processing function settings to be used by ith network input. The processing settings are found by applying the processing functions and parameters to exampleInput and then used to provide consistent results to new input values before the network uses them.

这是MATLAB帮助文档里截的,后面一大段话其实可以不看,只要看第一行最后两个单词就可以了:read only。只读啊,所以我们不能修改里面的参数。

那应该怎么进行修改呢,有两种方法。

  1. 通过exampleInput和exampleOutput属性进行配置
  2. 利用configure函数进行配置

通过exampleInput和exampleOutput进行设置

首先来说第一种,exampleInput和exampleOutput是告诉MATLAB我这个网络的典型输入输出是什么,MATLAB再根据这个典型输入输出进行预处理相关属性的设置。所以如果我们把我们希望定义的映射范围给传进去,那么就可以改变默认的映射变换关系。

我们首先来看一下现在的exampleInput是什么

net1.inputs{1, 1}.exampleInput

在这里插入图片描述
可以看到,因为目前还没有配置,所以exampleInput为空。

如果我们希望不进行预处理,也就是保持原有输入输出不变,那么我们可以这样设置exampleInput

net1.inputs{1, 1}.exampleInput = [1, -1];

这语句就是告诉MATLAB,我这个网络典型输入输出就是1和-1,你根据这个范围给我设置吧。所以如果我们这个时候再看processSettings会发现
在这里插入图片描述
输入侧的相应属性已经被修改了。同理可以通过exampleOutput来设置网络输出的映射变换关系。

通过configure函数进行设置

下面来说第二种,第一种要设置的内容藏得太深了,找起来不优雅,下面介绍第二种设置的方法。
首先重置一下网络

net1 = feedforwardnet(10);
net1 = configure(net1, t, y);

这个时候processSettings就还是之前的模样了
在这里插入图片描述
这次我们换一个情况,虽然我们的输入是[0, 10],但是我并不希望它不进行预处理,而是希望它将输入侧的定义域由[0, 10]改成[0, 5],那么我们可以这么做

selfDefinedRange = [0, 5];
net1 = configure(net1, selfDefinedRange);

第一句代码其实也是在定义exampleInput,但是并不是直接将它赋给exampleInput属性,而是通过configure函数来进行设置,这个时候再看processSettings就会发现
在这里插入图片描述
输入的范围按照我们的设想发生了相应的变化。

结语

以上就是关于MATLAB神经网络工具箱输入输出预处理相关参数的一个设置教程,希望对大家有帮助。另外如果有什么讲错的地方也欢迎大家批评指正。

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

MATLAB神经网络工具箱输入输出预处理相关参数设置 的相关文章

  • stm32 将int转换成char[]

    int a int i 61 0 j 61 0 char b 61 char a u8 c 4 for i 61 4 i gt 61 0 c j 43 43 61 b i 进行倒序 xff0c 不然显示出来是反的 xff1b USART1W
  • rabbitmq_management

    rabbitmq management是管理后台的插件 我们要开启这个插件才能通过浏览器访问登录页面 进入到sbin目录下 xff1a rabbitmq plugins enable rabbitmq management 开启服务 xff
  • freeRTOS调度

    freeRTOS调度策略 背景 嵌入式的设备开发通常有两种模式 xff1a 裸机开发和OS开发 像功能较为强大的SOC通常都会先一直linux或其他OS然后进行业务逻辑的开发 xff1b 而单片机则有很多简单的应用场景直接使用裸机开发的模式
  • 给树莓派安装Ubuntu mate(20.04LTS)并安装ROS(noetic)

    1 准备好基础的硬件设施 xff0c 然后去下载Ubuntu mate的镜像Ubuntu mate并烧录 PS xff1a 来自2022 7 8的我对曾经帖子的吐槽 xff0c 当时不知道装ROS有小鱼的一键安装 xff0c 如果安装到RO
  • VScode结合docker的ROS开发环境配置

    目录 软件安装VSCODEdocker docker image构建与运行VSCODE配置ROS插件配置clangd配置 软件安装 VSCODE 存在三种安装方式 xff0c 如下 xff1a 在vscode官网下载需要的版本直接进行安装
  • 李开复辞职前后的故事

    这些故事出自即将发售的 世界因你不同 xff1a 李开复自传 一书 xff0c 由李开复本人和北京青年报记者范海涛合写而成 以下为故事部分节选 xff1a 今天 xff0c 我开得很慢 xff0c 仿佛是让自己的心情在辽阔的天空下能够更加安
  • Gazebo仿真环境加载模型错误,卡在启动页面:Spawn service failed. Exiting 解决办法

    编写的功能包加载的世界模型文件路径如下 xff1a ganahe 64 ganahe Nitro AN515 51 catkin ws src autoNav uav ganahe models pwd home ganahe catkin
  • 集成sdk的正确姿势

    其实集成sdk很简单 xff0c 但是大部分人都有过集成sdk的经历 xff0c 而且一般都很痛苦 因为sdk分很多 xff0c 百度地图sdk xff0c 付费sdk xff0c 分享sdk等等 下面就介绍 一下本人集成sdk的一些技巧
  • http协议简析及C++实现HTTP请求

    http是超文本传输协议 xff0c 无状态协议 不同批次无法相互识别 xff0c 无连接协议 xff0c 工作在应用层 xff0c 用于完成从万维网服务器传输超文本到本地浏览器的传输协议 xff0c 完成了文档的快速传输 xff0c 还能
  • Error: Can‘t resolve ‘fs‘ in (Webpack 5.72.0)

    具体报错 xff1a ERROR in node modules handlebars lib index js 17 11 24 Module not found Error Can 39 t resolve 39 fs 39 in 39
  • 步进电机和伺服电机优缺点

    步进电机和伺服电机优缺点 步进电机和伺服电机优 缺点 xff1a 1 低频特性 步进电机在低速运行时会出现低频振动现象 xff0c 电机运行平稳性略逊于伺服电机 交流伺服电机运转非常平稳 xff0c 即使在低速时也不会出现振动现象 2 矩频
  • 十一种通用滤波算法

    十一种通用滤波算法 1 限幅滤波法 又称程序判断滤波法 A 方法 xff1a 根据经验判断 xff0c 确定两次采样允许的最大偏差值 设为A 每次检测到新值时判断 xff1a 如果本次值与上次值之差 lt 61 A xff0c 则本次值有效
  • HALCON:Optical Flow(光流法)

    HALCON xff1a Optical Flow xff08 光流法 xff09 光流法基本原理 光流概念由 Gibson 在 1950 年首先提出来 xff0c 它是一种简单实用的图像运动表达方式 xff0c 通常定义为一个图像序列中图
  • docker-环境搭建

    环境搭建 http www dockone io article 9120 https blog csdn net cloud xy article details 52470265 Docker版本 docker版本分为docker ee
  • 接口测试工具Postman接口测试图文教程

    Postman接口测试工具使用 一 前言 在前后端分离开发时 xff0c 后端工作人员完成系统接口开发后 xff0c 需要与前端人员对接 xff0c 测试调试接口 xff0c 验证接口的正确性可用性 而这要求前端开发进度和后端进度保持基本一
  • 内存的静态分配和动态分配的区别

    内存的静态分配和动态分配的区别主要是两个 xff1a 一是时间不同 静态分配发生在程序编译和连接的时候 动态分配则发生在程序调入和执行的时候 二是空间不同 堆都是动态分配的 xff0c 没有静态分配的堆 栈有2种分配方式 xff1a 静态分
  • Python用pip安装第三方库问题汇总

    1 pip 升级包的时候 xff0c 出现 xff1a Cannot uninstall xxx It is a distutils installed project 的解决方法 xff1b ERROR Cannot uninstall
  • 麻将胡牌算法思路(任意赖子)

    看网上算法穷举 xff0c 枚举 xff0c 剔除特殊情况等等很乱 xff0c 感觉还是写一套通用的逻辑比较好 这个算法前后修改了几次 xff0c 最终在三星s4这种老的安卓机上计算一次时间在0 04s左右 总体思路 xff1a 首先需要一
  • STM32HAL库 ADC结构体应避免直接拷贝赋值

    对ADC1的结构体AdcHandle1赋值并初始化后 xff0c 想要继续初始化ADC2的AdcHandle2 xff0c 想着大部分是一样的 xff0c 可以直接拷贝AdcHandle1 xff0c 也就是 AdcHandle2 61 A
  • 144个stm32开发相关的问题,看你了解几个

    1 SYSCLK时钟源有三个来源 xff1a HSI RC HSE OSC PLL 2 MCO 2 xff1a 0 可以提供4源不同的时钟同步信号 3 GPIO口貌似有两个反向串联的二极管用作钳位二极管 4 总线矩阵采用轮换算法对系统总线和

随机推荐