解决利用Matlab进行BP神经网络训练时出现的问题:警告:PREMNMX is an obsolete function.

        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函数。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值