annotate toolboxes/FullBNT-1.0.7/netlab3.3/hesschek.m @ 0:cc4b1211e677 tip

initial commit to HG from Changeset: 646 (e263d8a21543) added further path and more save "camirversion.m"
author Daniel Wolff
date Fri, 19 Aug 2016 13:07:06 +0200
parents
children
rev   line source
Daniel@0 1 function h = hesschek(net, x, t)
Daniel@0 2 %HESSCHEK Use central differences to confirm correct evaluation of Hessian matrix.
Daniel@0 3 %
Daniel@0 4 % Description
Daniel@0 5 %
Daniel@0 6 % HESSCHEK(NET, X, T) takes a network data structure NET, together with
Daniel@0 7 % input and target data matrices X and T, and compares the evaluation
Daniel@0 8 % of the Hessian matrix using the function NETHESS and using central
Daniel@0 9 % differences with the function NETERR.
Daniel@0 10 %
Daniel@0 11 % The optional return value H is the Hessian computed using NETHESS.
Daniel@0 12 %
Daniel@0 13 % See also
Daniel@0 14 % NETHESS, NETERR
Daniel@0 15 %
Daniel@0 16
Daniel@0 17 % Copyright (c) Ian T Nabney (1996-2001)
Daniel@0 18
Daniel@0 19 w0 = netpak(net);
Daniel@0 20 nwts = length(w0);
Daniel@0 21 h = nethess(w0, net, x, t);
Daniel@0 22
Daniel@0 23 w = w0;
Daniel@0 24 hcent = zeros(nwts, nwts);
Daniel@0 25 h1 = 0.0; h2 = 0.0; h3 = 0.0; h4 = 0.0;
Daniel@0 26 epsilon = 1.0e-4;
Daniel@0 27 fprintf(1, 'Checking Hessian ...\n\n');
Daniel@0 28 for k = 1:nwts;
Daniel@0 29 for l = 1:nwts;
Daniel@0 30 if(l == k)
Daniel@0 31 w(k) = w0(k) + 2.0*epsilon;
Daniel@0 32 h1 = neterr(w, net, x, t);
Daniel@0 33 w(k) = w0(k) - 2.0*epsilon;
Daniel@0 34 h2 = neterr(w, net, x, t);
Daniel@0 35 w(k) = w0(k);
Daniel@0 36 h3 = neterr(w, net, x, t);
Daniel@0 37 hcent(k, k) = (h1 + h2 - 2.0*h3)/(4.0*epsilon^2);
Daniel@0 38 else
Daniel@0 39 w(k) = w0(k) + epsilon;
Daniel@0 40 w(l) = w0(l) + epsilon;
Daniel@0 41 h1 = neterr(w, net, x, t);
Daniel@0 42 w(k) = w0(k) - epsilon;
Daniel@0 43 w(l) = w0(l) - epsilon;
Daniel@0 44 h2 = neterr(w, net, x, t);
Daniel@0 45 w(k) = w0(k) + epsilon;
Daniel@0 46 w(l) = w0(l) - epsilon;
Daniel@0 47 h3 = neterr(w, net, x, t);
Daniel@0 48 w(k) = w0(k) - epsilon;
Daniel@0 49 w(l) = w0(l) + epsilon;
Daniel@0 50 h4 = neterr(w, net, x, t);
Daniel@0 51 hcent(k, l) = (h1 + h2 - h3 - h4)/(4.0*epsilon^2);
Daniel@0 52 w(k) = w0(k);
Daniel@0 53 w(l) = w0(l);
Daniel@0 54 end
Daniel@0 55 end
Daniel@0 56 end
Daniel@0 57
Daniel@0 58 fprintf(1, ' analytical numerical delta\n\n');
Daniel@0 59 temp = [h(:), hcent(:), (h(:) - hcent(:))];
Daniel@0 60 fprintf(1, '%12.6f %12.6f %12.6f\n', temp');