does anyone know why this neural network is not giving the right target values????plz any helpppppp
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
abdulkader helwan
am 11 Nov. 2013
Bearbeitet: Walter Roberson
am 4 Sep. 2018
%a=imread('A.bmp');
%a=imresize(a,[6,5]);
%a=imresize(a,[1,30]);
inp=[0 0 1 0 0 0 0 1 1 0 0 1 0 1 0 0 1 0 1 0 0 1 1 1 1 1 0 0 0 1];
out=[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
net= newff(inp,out,10)
tol = 0.001; % Error tolerance
%net.trainParam.show = 50;
net.trainParam.lr = 0.007;
net.trainParam.epochs = 500;
net.trainParam.alpha = 0.5;
%net.trainParam.goal = 1e-5;
[net,tr]=train(net,inp,out);
a=sim(net,inp)
0 Kommentare
Akzeptierte Antwort
Greg Heath
am 13 Nov. 2013
% Weird data set:
plot(input,target,'o')
The data does not represent points from reasonable function. The target says" Regardless of the input, if the output is 0, your error will only be 3.33%".
Looking at an escalation of models (H=0:9) shows that the Linear model (H=0, NN with no hidden layer) is the best with a coefficient of determination (Wikipedia/R-squared) of only 0.0264. It is only slightly better than the constant output = 0 model.
close all, clear all, clc
N =30
input = [0 0 1 0 0 0 0 1 1 0 0 1 0 1 0 0 1 0 1 0 0 1 1 1 1 1 0 0 0 1];
target = [ 1, zeros( 1,N-1)];
% The simplest model is the constant output model that outputs the mean of the target regardless of the input.
y00 = (1/N)*ones(1,N); % 0.0333*ones(1,30)
e00 = target-y00; ; % [ 0.9667, -0.0333*ones(1,29)]
MSE00 = mse(target-y00) % 0.0322
% The next simplest is the linear model
W0 = target/[ ones(1,N) ; input ] % W0 = [ 0.0588 -0.0588 ]
y0 = W0 * [ ones(1,N) ; input ]; % y0 = 0.0588*(1-input)
e0 = target-y0; ; % [ 0.9412, -y0(2:end)]
MSE0 = mse(target-y0) % 0.0314 Not much better than constant model
R20 = 1 - MSE0/MSE00 % 0.0264 VERY BAD FIT
% Neural Model
[ I N ] = size(input) % [ 1 30 ]
[ O N ] = size(target) % [ 1 30 ]
Neq = N*O % 30 = No. of equations
% Nw = (I+1)*H+(H+1)*O = 1+3*H % No. of unknown weights
% No overfitting Neq > Nw==> H <= Hub (upper bound)
Hub = -1+ceil( (Neq-O) / ( I+O+1) ) % 9
Hmax = 9
dH = 1
Hmin = 0 % Linear Model
numH = length(Hmin:dH:Hmax) % 10
Ntrials = 10
rng(0)
j=0
for h=Hmin:dH:Hmax
j=j+1
if h==0
net = patternnet([]);
Nw = (I+1)*O
else
net = patternnet(h);
Nw = (I+1)*h+(h+1)*O
end
for i=1:Ntrials
net = configure(net, input,target);
net.divideFcn = 'dividetrain'; % Default 'dividerand' is much worse
[net tr y e ] = train(net,input,target);
R2(i,j) = 1 - mse(e)/MSE00;
end
end
R2 = R2 % 0.0264* ones(Ntrials,numH) Same as Linear
Hope this helps.
*Thank you for formally accepting my answer *
Greg
2 Kommentare
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Deep Learning Toolbox finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!