function [f, df] = ECG(VV,Dim,XX,target);

l1 = Dim(1);
l2 = Dim(2);
l4= Dim(3);
l5= Dim(4);
l10= Dim(5);
N = size(XX,1);

% Do decomversion.
 w1 = reshape(VV(1:(l1+1)*l2),l1+1,l2);
 xxx = (l1+1)*l2;
 w2 = reshape(VV(xxx+1:xxx+(l2+1)*l4),l2+1,l4);
 xxx = xxx+(l2+1)*l4;
 w4 = reshape(VV(xxx+1:xxx+(l4+1)*l5),l4+1,l5);
 xxx = xxx+(l4+1)*l5;
 w_class = reshape(VV(xxx+1:xxx+(l5+1)*l10),l5+1,l10);


  XX = [XX ones(N,1)];
  w1probs = 1./(1 + exp(-XX*w1)); w1probs = [w1probs  ones(N,1)];
  w2probs = 1./(1 + exp(-w1probs*w2)); w2probs = [w2probs ones(N,1)];
  w4probs = 1./(1 + exp(-w2probs*w4)); w4probs = [w4probs  ones(N,1)];

  targetout = exp(w4probs*w_class);
  targetout = targetout./repmat(sum(targetout,2),1,10);
f = -1/N*sum(sum( target(:,1:end).*log(targetout))) ;

IO = 1/N*(targetout-target(:,1:end));
Ix_class=IO; 
dw_class =  w4probs'*Ix_class; 

Ix4 = (Ix_class*w_class').*w4probs.*(1-w4probs);
Ix4 = Ix4(:,1:end-1);
dw4 =  w2probs'*Ix4;

Ix2 = (Ix4*w4').*w2probs.*(1-w2probs); 
Ix2 = Ix2(:,1:end-1);
dw2 =  w1probs'*Ix2;

Ix1 = (Ix2*w2').*w1probs.*(1-w1probs); 
Ix1 = Ix1(:,1:end-1);
dw1 =  XX'*Ix1;

df = [dw1(:)' dw2(:)' dw4(:)' dw_class(:)']'; 


