0

您好,我想使用测井值估计油藏岩石中的两个岩石物理特性,并且我在 MLP 方法中的 Matlab(R2014b 版本)中有一些神经网络代码。

重要的是,我使用了有趣的技术来确定单个隐藏层中的最佳神经元数:首先将神经元数分配给 5,然后根据步长等于 5,这个神经元数增长到 100,即:5、10、15, ...,100

现在为了确定最佳神经元数,我编写了一个代码,用于绘制 X 轴有神经元数和 Y 轴有错误值(训练阶段的最后一次迭代)的图表,我在下面写了这个代码:

nnn1=5;                             % First Number of Neurons in Hidden Layer
nnnj=5;                             % Jump in Number of Neurons 
nnnf=100;                           % Last Number of Neurons in Hidden Layer


% Training Network

it=25;                                             % Max Number of   Iteration
ii=0;
netopt{:}=1:nnnf;
for nnn=nnn1:nnnj:nnnf
ii=ii+1; nnn
net1=newff(p,t,[nnn nnn],{'purelin','purelin'},'traingd'); 

evalopt(ii)=10^5;

for i=1:it
    [net1,tr,y,et]=train(net1,p,t);             % Training
    net1.divideParam.trainRatio=trainRatio1;
    net1.divideParam.valRatio=valRatio1;
    net1.divideParam.testRatio=testRatio1;
    estval=sim(net1,p(:,tr.valInd)); 
    eval=mse(estval-t(:,tr.valInd));
    if  eval<evalopt(ii)
        netopt{(ii)}=net1; tropt(ii)=tr; evalopt(ii)=eval;
    end
end
end

plot(nnn1:nnnj:nnnf,evalopt)

但是当我在上面代码的最后一行中按下“运行部分”按钮时,Matlab 显示此错误消息:“此分配的右侧值太少,无法满足左侧”而不是在上面提到的图形上绘制。请指导我修复 Matlab 中的此错误...我在下面再次编写了所有代码...

clc; clear; close all
data=xlsread('sarvak_normalized.xlsx');  % Input File
corrplot(data)

input=[1:9]; % Input Layer
p=data(:,input);
output=[10:11];                        % Output Layer
t=data(:,output);
p=p'; t=t';                         % Transposing Matrices



trainRatio1=.6;
valRatio1=.2;
testRatio1=.2;


%% Network Definition

nnn1=5;                             % First Number of Neurons in Hidden  Layer
nnnj=5;                             % Jump in Number of Neurons 
nnnf=100;                           % Last Number of Neurons in Hidden Layer



% Training Network

it=25;                                             % Max Number of Iteration
ii=0;
netopt{:}=1:nnnf;
for nnn=nnn1:nnnj:nnnf
ii=ii+1; nnn
net1=newff(p,t,[nnn nnn],{'purelin','purelin'},'traingd'); 

evalopt(ii)=10^5;

for i=1:it
    [net1,tr,y,et]=train(net1,p,t);             % Training
    net1.divideParam.trainRatio=trainRatio1;
    net1.divideParam.valRatio=valRatio1;
    net1.divideParam.testRatio=testRatio1;
    estval=sim(net1,p(:,tr.valInd)); 
    eval=mse(estval-t(:,tr.valInd));
    if  eval<evalopt(ii)
        netopt{(ii)}=net1; tropt(ii)=tr; evalopt(ii)=eval;
    end
end
end

plot(nnn1:nnnj:nnnf,evalopt)


nn=2

ptrain=p(:,tropt(nn).trainInd);     ttrain=t(:,tropt(nn).trainInd);      esttrain=sim(netopt{nn},ptrain);
ptest=p(:,tropt(nn).testInd);       ttest=t(:,tropt(nn).testInd);        esttest=sim(netopt{nn},ptest);
pval=p(:,tropt(nn).valInd);         tval=t(:,tropt(nn).valInd);          estval=sim(netopt{nn},pval);
estwhole=sim(netopt{nn},p);



plotregression(ttrain,esttrain,'Train',tval,estval,'Validation',...
ttest,esttest,'Test',t,estwhole,'Whole Data');

当我在最后一行完整代码中按下“运行部分”按钮时,也会出现相同的错误消息;“ plotregression ...”用于了解神经网络过程的 3 个阶段中的模型准确性。

当然,有时 Matlab 会绘制回归图,但会显示“plot(nnn1:nnnj:nnnf,evalopt)”的错误消息,反之亦然,有时不绘制任何图。谢谢...

4

0 回答 0