目录

  • 问题由来
  • 预处理相关属性
    • 预处理函数
    • 预处理参数
    • 修改默认映射变换
      • 通过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{1, 2}

来查看,因为上面可以看到有两个预处理函数,每个预处理函数的设置都是一个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神经网络工具箱输入输出预处理相关参数的一个设置教程,希望对大家有帮助。另外如果有什么讲错的地方也欢迎大家批评指正。

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

  1. Matlab神经网络工具箱中net.trainParam设置不成功问题

    Matlab神经网络工具箱中net.trainParam设置不成功问题 本人找寻很久发现即使设置了net.trainParam中的各参数值,但是在nntraintool显示后一直都没有改变,找遍全网都 ...

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

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

  3. 利用matlab神经网络工具箱预测中国代表团在2012年伦敦奥运会获金牌和奖牌情况...

    2019独角兽企业重金招聘Python工程师标准>>> 我越来越不喜欢matlab,因为它让我们只需要使用它的工具箱:我越来越喜欢matlab,因为在它的工具箱里隐藏着无数优秀甚至卓 ...

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

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

  5. matlab提取网络层输出,matlab神经网络工具箱的net数据提取

    小弟不才,最近在学神经网络用于我们实验室的一款机器人的动力学辩识,由于最终的程序需要用C/C++编写,另外为了更加深入了解MATLAB神经网络工具箱的原理,因此花了一点时间研究了一下静态神经网络与动态 ...

  6. matlab2007神经网络工具箱怎么用,matlab神经网络工具箱怎么用

    类型:Mac学习教育大小:11.37G语言:多国语言[中文] 评分:10.0 标签: 立即下载 matlab2010版后的都是有神经网络工具箱的,用户在软件内可以直接使用,很多小伙伴对这个工具还不了解 ...

  7. Hadoop MapReduce Job 相关参数设置 概念介绍与理解

    Hadoop MapReduce  Job 相关参数设置 概念介绍与理解 InputFormat: 作用:将输入的文件分成 一个个split,并且将split 拆分成一个个<key,value& ...

  8. matlab神经网络工具箱关掉ValidationChecks的三种方法

    原文来自  老饼玩转-BP神经网络http://bp.bbbdata.com/teach#107 目录 一.Validation Checks是什么 二.怎么关掉Validation Checks 本 ...

  9. matlab神经网络工具箱创建神经网络,matlab神经网络工具箱创建神经网络

    matlab神经网络工具箱创建神经网络 为了看懂师兄的文章中使用的方法,研究了一下神经网络 昨天花了一天的时间查怎么写程序,但是费了半天劲,不能运行,百度知道里倒是有一个,可以运行的,先贴着做标本 % ...

最新文章

  1. linux 下 ifcfg-eth0 配置
  2. oppo 手机侧滑快捷菜单_OPPO手机的十年之路,创新精神让品牌再升华
  3. 使用Elasticsearch+filebeat+logstach+kibana构建日志服务平台
  4. 中国金融数字科创大赛丨神策数据客户——深圳农商银行、昆山农商银行斩获「双奖」
  5. linux下编译软件通用方法(memcached为例)
  6. 光流 | 基于Matlab实现Lucas-Kanade方法:方法2(附源代码)
  7. 查询进程打开的文件(转)
  8. 解决SpringBoot多模块发布时99%的问题?SpringBoot发布的8个原则和4个问题的解决方案
  9. 2016美国计算机科学硕士,美国计算机科学硕士MS in Computer Science TOP10学校录取要求提醒...
  10. Maven公共仓库/镜像站收集及使用技巧
  11. tracepro杂散光分析例子_第二期青年矿床学家网络论坛(刘琰碳酸岩杂岩体型稀土矿;王小林CO2成矿效应)...
  12. cartographer基于3d地图的纯定位模式
  13. 主力吸筹猛攻指标源码_主力吸筹猛攻指标源码-通达信公式 -程序化交易(CXH99.COM)...
  14. php 生成excel表格,PHP 生成Excel表格两种方法
  15. Android 悬浮窗口(及解决6.0以上无法显示问题)
  16. smtplib 改为通过SSL 465 发送邮件
  17. 计算机装两个显示器怎么操作,一台电脑两个显示器的设置方法
  18. 主成分分析碎石图_选取公共因子时 碎石图怎么看
  19. 用友系统服务器如何安装,用友数据库服务器安装步骤
  20. GARCH-QR非线性回归(GQNR)交易模型(初稿)

热门文章

  1. 英语语法总结14(名词性从句:表语从句)
  2. 帮忙投票被 是大学生投票活动 投第五个 谢谢啦
  3. Nancy 返回值详解
  4. TortoiseGit小乌龟无法汉化的问题
  5. 影响景深的三要素及依据(人像摄影基本原则)
  6. Travel(dij)
  7. Givens旋转变换
  8. Zeus Web服务器生成CSR文件的方法
  9. 移动机器人中的现代控制理论之状态空间表达式
  10. 以训辅教,以战促学 | 新版攻防世界平台正式上线运营!