一个bp 神经网络要改成小波神经网络,我查了函数库还是没找到,请问怎么改?就是将小波基函数db8当作激活函数。
%导入数据 训练集为 solarinputtrain和solarresulttrain
%测试集为solarinputtest和solarresulttest
%隐藏层神经元数量为100
hls=50
waveletFunction='db8';
%前馈神经网络
net=feedforwardnet(hls);
%训练集的算法设置
net.trainFcn='trainlm';
%net.trainFcn='traincg';
%net.trainFcn='trainbr';
%数据准备
Tsolarresulttest=solarresulttest'
%训练神经网络
net=train(net,solarinputtrain',solarresulttrain');
%查看神经网络
view(net)
%查看神经网络性能
perform(net,solarinputtest',solarresulttest')
%模拟神经网络输出
YSim=sim(net,solarinputtest');
%计算误差
error=solarresulttest'-YSim;
%均方误差
mse=mean(error.^2)
%均方根误差
rmse=sqrt(mse)
%平均绝对误差
mae=mean(abs(error))
%MAPR函数
pct_error=abs(error./solarresulttest')*100;
mape=mean(pct_error);
% 可视化结果
figure;
% 实际值与预测值
plot(solarresulttest', 'r');
hold on;
plot(YSim, 'b');
legend('实测值', '预测值');
xlabel('数据点');
ylabel('太阳辐射');
hold off;
% 训练神经网络并获取训练记录
[net, tr] = train(net, solarinputtrain', solarresulttrain');
% 获取迭代次数
iterations = tr.epoch;
iterationsMax=max(iterations)+1
%为tr结构创建变量
mape_r = zeros(1,iterationsMax); % 初始化一个用于存储MAPE的数组
for i = 1:iterationsMax
% 计算当前迭代的MAPE
mape = abs(error(i) ./ Tsolarresulttest(i)) ;
% 将计算出的MAPE存储在mape_r数组的相应位置
mape_r(i) = mape;
end
tr.mape_val=mape_r;
% 获取性能指标的变化
mse_epochs = tr.perf;
rmse_epochs = sqrt(mse_epochs);
mae_epochs = tr.vperf;
mape_epochs = tr.mape_val
% 获取 R方 的变化
r2_epochs = 1 - mse_epochs / var(solarresulttest);
% 绘制均方误差(MAPE)随迭代次数的变化
figure;
plot(iterations, mape_epochs,'k');
title('MAPE随迭代次数的变化');
xlabel('数值大小');
legend('MAPE');
xlabel('迭代次数')
% 绘制均方误差(MSE)随迭代次数的变化
figure;
plot(iterations, mse_epochs, 'r');
title('MSE随迭代次数的变化');
xlabel('数值大小');
legend('MSE');
xlabel('迭代次数')
% 绘制均方误差(RMSE)随迭代次数的变化
figure;
plot(iterations, rmse_epochs, 'b');
title('RMSE 随迭代次数的变化');
xlabel('数值大小');
legend('RMSE');
xlabel('迭代次数')
% 绘制均方误差(MAE)随迭代次数的变化
figure;
plot(iterations, mae_epochs, 'g');
title('MAE 随迭代次数的变化');
xlabel('数值大小');
legend('MAE');
xlabel('迭代次数')
%导入数据 训练集为 solarinputtrain和solarresulttrain
%测试集为solarinputtest和solarresulttest
%隐藏层神经元数量为100
hls=50
waveletFunction='db8';
%前馈神经网络
net=feedforwardnet(hls);
%训练集的算法设置
net.trainFcn='trainlm';
%net.trainFcn='traincg';
%net.trainFcn='trainbr';
%数据准备
Tsolarresulttest=solarresulttest'
%训练神经网络
net=train(net,solarinputtrain',solarresulttrain');
%查看神经网络
view(net)
%查看神经网络性能
perform(net,solarinputtest',solarresulttest')
%模拟神经网络输出
YSim=sim(net,solarinputtest');
%计算误差
error=solarresulttest'-YSim;
%均方误差
mse=mean(error.^2)
%均方根误差
rmse=sqrt(mse)
%平均绝对误差
mae=mean(abs(error))
%MAPR函数
pct_error=abs(error./solarresulttest')*100;
mape=mean(pct_error);
% 可视化结果
figure;
% 实际值与预测值
plot(solarresulttest', 'r');
hold on;
plot(YSim, 'b');
legend('实测值', '预测值');
xlabel('数据点');
ylabel('太阳辐射');
hold off;
% 训练神经网络并获取训练记录
[net, tr] = train(net, solarinputtrain', solarresulttrain');
% 获取迭代次数
iterations = tr.epoch;
iterationsMax=max(iterations)+1
%为tr结构创建变量
mape_r = zeros(1,iterationsMax); % 初始化一个用于存储MAPE的数组
for i = 1:iterationsMax
% 计算当前迭代的MAPE
mape = abs(error(i) ./ Tsolarresulttest(i)) ;
% 将计算出的MAPE存储在mape_r数组的相应位置
mape_r(i) = mape;
end
tr.mape_val=mape_r;
% 获取性能指标的变化
mse_epochs = tr.perf;
rmse_epochs = sqrt(mse_epochs);
mae_epochs = tr.vperf;
mape_epochs = tr.mape_val
% 获取 R方 的变化
r2_epochs = 1 - mse_epochs / var(solarresulttest);
% 绘制均方误差(MAPE)随迭代次数的变化
figure;
plot(iterations, mape_epochs,'k');
title('MAPE随迭代次数的变化');
xlabel('数值大小');
legend('MAPE');
xlabel('迭代次数')
% 绘制均方误差(MSE)随迭代次数的变化
figure;
plot(iterations, mse_epochs, 'r');
title('MSE随迭代次数的变化');
xlabel('数值大小');
legend('MSE');
xlabel('迭代次数')
% 绘制均方误差(RMSE)随迭代次数的变化
figure;
plot(iterations, rmse_epochs, 'b');
title('RMSE 随迭代次数的变化');
xlabel('数值大小');
legend('RMSE');
xlabel('迭代次数')
% 绘制均方误差(MAE)随迭代次数的变化
figure;
plot(iterations, mae_epochs, 'g');
title('MAE 随迭代次数的变化');
xlabel('数值大小');
legend('MAE');
xlabel('迭代次数')