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)
对它们进行了归一化。我应该在这个min
和max
范围内标准化我的一个新输入模式吗?
【问题讨论】:
【参考方案1】:好吧,假设归一化是线性的(可能是),您可以将输出乘以 1000 并四舍五入。
您还可以使用不同的传输函数。 Sigmoid 有许多理想的属性,但它不能产生任何大于 1 的东西(如果你的输出达到 1000,这是必要的)。我认为通常最后一层具有线性传递函数 - 但由于您的输出如此之大,在这种特殊情况下可能还不够。
【讨论】:
几乎所有激活函数都在[0 1]
或[-1 1]
范围内工作。我的意思是,数据应该在这些范围内标准化。如果我的真正目标在[50 800]
之间,我怎样才能将 NN 输出更改为这个范围?我想,我应该在这两个不同的范围之间做一个映射,来自 NN 的[0 1]
和真正的范围[50 800]
。我说的对吗?
是的,我相信你是。以上是关于MATLAB中神经网络建模中的归一化和非归一化的主要内容,如果未能解决你的问题,请参考以下文章