当前位置:   article > 正文

解决利用Matlab进行BP神经网络训练时出现的问题:警告:PREMNMX is an obsolete function._use mapminmax instead, type help premnmx for bug w

use mapminmax instead, type help premnmx for bug warning.

        PREMNMX函数(PRe-process MINMAX)是MATLAB神经网络工具箱中的一个过时函数,用于对数据进行最小-最大值归一化。它将输入矩阵归一化到指定的范围,例如[0, 1]。然而,由于其不够灵活和功能有限,MATLAB建议使用函数MAPMINMAX代替。MAPMINMAX函数(Map Input-Output to New Range)是MATLAB神经网络工具箱中用于数据预处理的推荐函数。它将输入数据映射到指定的范围,同时计算并保留用于后续数据还原的参数。这种方法不仅支持最小-最大值归一化,还支持其他类型的数据转换和标准化,还提供了更多参数和选项来满足不同的预处理需求,十分具有实效性。

在matlab中利用BP神经网络进行一组数据的训练和预测时,出现了警告:

  1. 警告: PREMNMX is an obsolete function.
  2. > 位置:nnerr.obs_fcn (第 17 行)
  3. 位置: premnmx (第 23 行)
  4. 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函数使用的代码示例为:

  1. % 利用 mapminmax 函数对数据进行归一化
  2. [pn, ps_p] = mapminmax(p); % 对输入矩阵 p 进行归一化处理
  3. [tn, ps_t] = mapminmax(t); % 对输出矩阵 t 进行归一化处理

对应的,我们需要对返归一化时的原始代码进行修改,返归一化的原始代码为:

  1. %利用原始数据对BP网络仿真
  2. an=sim(net,pn);
  3. a=postmnmx(an,mint,maxt);
  4. pnew=p;
  5. pnewn=tramnmx(pnew,minp,maxp);
  6. anewn=sim(net,pnewn);
  7. anew=postmnmx(anewn,mint,maxt);

同样的,对应于PREMNMX函数所使用的postmnmx函数和tramnmx函数也存在对应的问题,可以直接利用MAPMINMAX函数进行简化:

  1. % 利用原始数据对 BP 网络仿真
  2. an = sim(net, pn); % 用训练好的模型进行仿真
  3. a = mapminmax('reverse', an, ps_t); % 把仿真得到的数据还原为原始的数量级;

为了更好的进行仿真结果对比以及相对误差的计算,可以添加下述代码进行结果展示:

  1. % 输出原始数据和仿真结果进行对比
  2. disp('Original Data and Simulated Data Comparison:');
  3. disp('--------------------------------------------');
  4. disp('Original Data (Target):');
  5. disp(t);
  6. disp('Simulated Data (Output):');
  7. disp(a);
  8. % 计算相对误差
  9. error= abs(t - a) ./ t;
  10. disp('Relative Errors:');
  11. disp(error);

        由此,只需要定义好输入矩阵p和输出矩阵t的具体数值,并且注意好相应的数据维度,便能够解决该问题,实现从PREMNMX函数改为使用MAPMINMAX函数。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/89981
推荐阅读
相关标签
  

闽ICP备14008679号