function [y, extra, invhess] = netevfwd(w, net, x, t, x_test, invhess)
%NETEVFWD Generic forward propagation with evidence for network
% [Y, EXTRA] = NETEVFWD(W, NET, X, T, X_TEST) takes a network data
% structure NET together with the input X and target T training data
% and input test data X_TEST. It returns the normal forward propagation
% through the network Y together with a matrix EXTRA which consists of
% error bars (variance) for a regression problem or moderated outputs
% for a classification problem.
% The optional argument (and return value) INVHESS is the inverse of
% the network Hessian computed on the training data inputs and targets.
% Passing it in avoids recomputing it, which can be a significant
% saving for large training sets.
% See also
% MLPEVFWD, RBFEVFWD, GLMEVFWD, FEVBAYES
% Copyright (c) Ian T Nabney (1996-2001)
func = [net.type, 'evfwd'];
net = netunpak(net, w);
if nargin == 5
[y, extra, invhess] = feval(func, net, x, t, x_test);
[y, extra, invhess] = feval(func, net, x, t, x_test, invhess);