MATLAB中神经网络建模中的归一化和非归一化

Posted

技术标签:

【中文标题】MATLAB中神经网络建模中的归一化和非归一化【英文标题】:normalization and non-normalization in Neural Network modeling in MATLAB 【发布时间】:2014-02-03 18:08:34 【问题描述】:

我有一个包含 5 个输入和一个输出的数据集。我想在 MATLAB 中使用神经网络建模来训练这个数据集。当我输入没有标准化的数据时,MSE 在1e+3 附近非常大。但是,当我规范化输入数据时,输出错误变为1e-4 左右。所以,据我所知,标准化是一项重要的任务。

我的两个问题:

1- 我在训练过程之前的真实目标(输出)在[0 1000][50 800] 的范围内,但在归一化之后,由于归一化,神经网络给了我一个在[0 1] 范围内的值。我的意思是,我无法在我的真实范围[0 1000][50 800] 中获得任何值。如何将神经网络的输出转换为[0 1000][50 800] 范围内的正确目标?这样做合乎逻辑吗?当我的真实(目标)输出应该是[0 1000][50 800] 时,我可以用[0 1] 范围内的值做什么?

2- 我想用一种新的输入模式测试经过训练的 NN。当我在训练阶段对输入数据进行归一化时,应该对这个新的输入模式进行归一化。是的?如何?我的意思是,我在训练阶段的输入数据大约是 1000 个数据,我用(x-min)/(max-min) 对它们进行了归一化。我应该在这个minmax 范围内标准化我的一个新输入模式吗?

【问题讨论】:

【参考方案1】:

好吧,假设归一化是线性的(可能是),您可以将输出乘以 1000 并四舍五入。

您还可以使用不同的传输函数。 Sigmoid 有许多理想的属性,但它不能产生任何大于 1 的东西(如果你的输出达到 1000,这是必要的)。我认为通常最后一层具有线性传递函数 - 但由于您的输出如此之大,在这种特殊情况下可能还不够。

【讨论】:

几乎所有激活函数都在[0 1][-1 1] 范围内工作。我的意思是,数据应该在这些范围内标准化。如果我的真正目标在[50 800] 之间,我怎样才能将 NN 输出更改为这个范围?我想,我应该在这两个不同的范围之间做一个映射,来自 NN 的[0 1] 和真正的范围[50 800]。我说的对吗? 是的,我相信你是。

以上是关于MATLAB中神经网络建模中的归一化和非归一化的主要内容,如果未能解决你的问题,请参考以下文章

维度模型 VS 非归一化模型

人工神经网络中的归一化

matlab中啥叫归一化坐标

数据归一化和两种常用的归一化方法

数据归一化和两种常用的归一化方法

数据归一化和两种常用的归一化方法