使用matlab利用代码构建BP神经网络load加载mat文件时遇到了问题


clear all

% 一般样本,一行测试,
%  输入输出数据

%*************************************************************************%
% 样本
%*************************************************************************%
%-------------------------------------------------------------------------%
% 样本1的输入
%-------------------------------------------------------------------------%
currdir = pwd;
currdir = currdir(1:find(currdir=='\', 1, 'last' )-1);
FileNameHueData = strcat(currdir,'\solutionMonteCarloOptimalTrajectory_1000.mat');
load (FileNameHueData)

% 
numPairs = 1001;
numTraj  = length(solutionMonteCarloOptimalTrajectory);
input  = zeros(7,numPairs*numTraj);
output = zeros(3,numPairs*numTraj);
for iTraj = 1:numTraj,
    state   = solutionMonteCarloOptimalTrajectory(iTraj).state';
    control = solutionMonteCarloOptimalTrajectory(iTraj).control';
    input(:,(iTraj-1)*numPairs+1:iTraj*numPairs)  = state;
    output(:,(iTraj-1)*numPairs+1:iTraj*numPairs) = control;
end

numSample = length(input);
numTrain = numSample-800000;
k=rand(1,numSample);
[m,n]=sort(k);
inputTrain=input(:,n(1:numTrain));
outputTrain=output(:,n(1:numTrain));
inputTest=input(:,n(numTrain+1:numSample));
outputTest=output(:,n(numTrain+1:numSample));


%训练样本输入输出数据归一化
[inputn,inputps]=mapminmax(inputTrain);
[outputn,outputps]=mapminmax(outputTrain);

%*************************************************************************%
% BP网络训练
%*************************************************************************%
% 初始化网络结构
net=newff(inputn,outputn,[20 20]);  

net.trainParam.epochs=200;
net.trainParam.lr=0.01;
net.trainParam.goal=0.00004/10;

%网络训练
if 1,
    t1=tic
    net=train(net,inputn,outputn);
    runtime = toc(t1)
else
    % 保存网络结果
    % save('net_Nervous10_Image2802_lessSample','net','inputps','inputps');
    % load net_Nervous10_Image2802
end


%*************************************************************************%
% BP网络预测
%*************************************************************************%




%预测数据归一化
inputnTest=mapminmax('apply',inputTest,inputps);

%网络预测输出
t1 = tic
an = sim(net,inputnTest);
runtime = toc(t1)

%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);



if 0
netWork.net = net;
netWork.inputps = inputps;
netWork.outputps = outputps;
% save ('netWork_Tra1000_L2C20_78','netWork')
% save netWork_Tra1000_L3C30
load netWork_Tra1000_L2C20_78

% inputTest = [ 2000+22     0  1500  100    0  -75  1905]';
% inputnTest=mapminmax('apply',inputTest,inputps);
% an = sim(net,inputnTest);
% BPoutput=mapminmax('reverse',an,outputps);
% u = BPoutput

end


%*************************************************************************%
% BP网络预测的误差曲线
%*************************************************************************%
figure( )
plot(BPoutput(1,:),'-o')
hold on
plot(outputTest(1,:),'-*r');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
grid on

figure( )
plot(BPoutput(2,:),':o')
hold on
plot(outputTest(2,:),'-*r');
grid on
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)

figure( )
plot(BPoutput(3,:),':o')
hold on
plot(outputTest(3,:),'-*r');
grid on
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)


%预测误差
error = BPoutput-outputTest;

figure( ), hold on
plot(error(1,:)./BPoutput(1,:),'-*r')
xlabel('样本','fontsize',12)
ylabel('方向分量1误差','fontsize',12)
grid on
M1 = mean(error(1,:));
S1 = std(error(1,:),1);
MSE1 = (sum(abs(error(1,:)).*abs(error(1,:)))/length(error(1,:)));
% M1 = mean(abs(error(1,:)));

figure( ), hold on
plot(error(2,:),'-*r')
xlabel('样本','fontsize',12)
ylabel('方向分量2误差','fontsize',12)
grid on
M2 = mean(error(2,:));
S2 = std(error(2,:),1);
MSE2 = (sum(abs(error(2,:)).*abs(error(2,:)))/length(error(2,:)));

figure( ), hold on
plot(error(3,:),'-*r')
xlabel('样本','fontsize',12)
ylabel('大小误差','fontsize',12)
grid on
M3 = mean(error(3,:));
S3 = std(error(3,:),1);
MSE3 = (sum(abs(error(3,:)).*abs(error(3,:)))/length(error(3,:)));

[MSE1 MSE2 MSE3] % 1.0e+002 *  0.000000664997054   0.000000017878801   9.281396941707872 for [10 10]



%  6 6 0.5812  0.0785; %
% 8  8 0.4568  0.0478;
%10 10 0.7993  0.2325 (0.3718    0.1463);
%12 12 0.4619  0.1029
[MSE1 MSE2] ;

if 0
    
n = 41;
% figure
% plot(HueBeta,inputTest(:,n),'o')
% grid on
    
p_min =[  1   1 -80  0.1]; % minimum parameter values
p_max =[200  80  80  200]; % maximum parameter values
p_init=[100  50   0  120]; % initial guess of parameter values
% lm is a package download from internet for solving least
% square curve fit problems in Levenberg-Marquardt Method.
t = HueBeta';
y_dat = inputTest(:,n);
p_init(1) = max(y_dat);
p_init(2) = min(y_dat);
[C,ind] = max(y_dat);
p_init(3) = t(ind); 
[p_fit,X2,corr,sigma_p,sigma_y,R_sq,cvg_hst,delta_y] = ...
    lm('FitFunctionGauss',p_init,t,y_dat,1,0.001,p_min,p_max);
if 1,
    figure( ), 
    plot(t,y_dat,'o');%
    x=-90:90;
    y=FitFunctionGauss(x,p_fit);
    hold on; 
    plot(x,y,'-');
    grid on
end

end

会提示报错:

未定义函数或变量 'solutionMonteCarloOptimalTrajectory'。

步进调试显示:

出错 mainBP_v1 (line 20)
numTraj  = length(solutionMonteCarloOptimalTrajectory);

 

 

solutionMonteCarloOptimalTrajectory_1000是一个.mat文件

 

检查一下FileNameHueData这个mat文件中储存的变量名称是否为solution,而不是solutionMonteCarloOptimalTrajectory。