您好,我想使用测井值估计油藏岩石中的两个岩石物理特性,并且我在 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)”的错误消息,反之亦然,有时不绘制任何图。谢谢...