赞
踩
PREMNMX函数(PRe-process MINMAX)是MATLAB神经网络工具箱中的一个过时函数,用于对数据进行最小-最大值归一化。它将输入矩阵归一化到指定的范围,例如[0, 1]。然而,由于其不够灵活和功能有限,MATLAB建议使用函数MAPMINMAX代替。MAPMINMAX函数(Map Input-Output to New Range)是MATLAB神经网络工具箱中用于数据预处理的推荐函数。它将输入数据映射到指定的范围,同时计算并保留用于后续数据还原的参数。这种方法不仅支持最小-最大值归一化,还支持其他类型的数据转换和标准化,还提供了更多参数和选项来满足不同的预处理需求,十分具有实效性。
在matlab中利用BP神经网络进行一组数据的训练和预测时,出现了警告:
- 警告: PREMNMX is an obsolete function.
- > 位置:nnerr.obs_fcn (第 17 行)
- 位置: premnmx (第 23 行)
- Use MAPMINMAX instead, type HELP PREMNMX for bug warning.
发生该错误的原因是利用PREMNX函数进行归一化处理在更新后的matlab版本已经不适用了,系统提示PREMNMX函数已过时,建议使用MAPMINMAX函数代替,接下来以一个例子介绍如何将代码中使用PREMNMX函数的部分改为使用MAPMINMAX函数,并且输出训练后返归一化的数据,计算真实数据和预测数据的误差。
在神经网络中,数据归一化是一种常用的预处理技术,用于将输入和输出数据映射到特定的范围,以改善神经网络的训练和性能。数据归一化可以有效地将数据值缩放到相对较小的范围,以避免在训练过程中出现梯度消失或梯度爆炸等问题。在反向传播(Backpropagation)神经网络中,通常需要进行数据归一化和反归一化。
原始神经网络中利用PREMNMX函数进行归一化处理的代码为:
[pn,minp,maxp,tn,mint,maxt]=premnmx(p,t); % 对于输入矩阵p和输出矩阵t进行归一化处理
其中,p表示输入数据矩阵,t表示目标数据矩阵,即输出数据矩阵。
将其修改为MAPMINMAX函数使用的代码示例为:
- % 利用 mapminmax 函数对数据进行归一化
- [pn, ps_p] = mapminmax(p); % 对输入矩阵 p 进行归一化处理
- [tn, ps_t] = mapminmax(t); % 对输出矩阵 t 进行归一化处理
对应的,我们需要对返归一化时的原始代码进行修改,返归一化的原始代码为:
- %利用原始数据对BP网络仿真
- an=sim(net,pn);
- a=postmnmx(an,mint,maxt);
- pnew=p;
- pnewn=tramnmx(pnew,minp,maxp);
- anewn=sim(net,pnewn);
- anew=postmnmx(anewn,mint,maxt);
同样的,对应于PREMNMX函数所使用的postmnmx函数和tramnmx函数也存在对应的问题,可以直接利用MAPMINMAX函数进行简化:
- % 利用原始数据对 BP 网络仿真
- an = sim(net, pn); % 用训练好的模型进行仿真
- a = mapminmax('reverse', an, ps_t); % 把仿真得到的数据还原为原始的数量级;
为了更好的进行仿真结果对比以及相对误差的计算,可以添加下述代码进行结果展示:
- % 输出原始数据和仿真结果进行对比
- disp('Original Data and Simulated Data Comparison:');
- disp('--------------------------------------------');
- disp('Original Data (Target):');
- disp(t);
- disp('Simulated Data (Output):');
- disp(a);
-
- % 计算相对误差
- error= abs(t - a) ./ t;
- disp('Relative Errors:');
- disp(error);
由此,只需要定义好输入矩阵p和输出矩阵t的具体数值,并且注意好相应的数据维度,便能够解决该问题,实现从PREMNMX函数改为使用MAPMINMAX函数。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。