76#ifdef MethodMLP_UseMinuit__
168#ifdef MethodMLP_UseMinuit__
198 "Train with Back-Propagation (BP), BFGS Algorithm (BFGS), or Genetic Algorithm (GA - slower and worse)");
206 DeclareOptionRef(
fEpochMon =
kFALSE,
"EpochMonitoring",
"Provide epoch-wise monitoring plots according to TestRate (caution: causes big ROOT output file!)" );
209 DeclareOptionRef(
fSamplingEpoch=1.0,
"SamplingEpoch",
"Sampling is used for the first 'SamplingEpoch' epochs, afterwards, all events are taken for training");
210 DeclareOptionRef(
fSamplingWeight=1.0,
"SamplingImportance",
" The sampling weights of events in epochs which successful (worse estimator than before) are multiplied with SamplingImportance, else they are divided.");
219 "Back-propagation learning mode: sequential or batch");
224 "Batch size: number of events/batch, only set if in Batch Mode, -1 for BatchSize=number_of_events");
227 "Minimum improvement which counts as improvement (<0 means automatic convergence check is turned off)");
230 "Number of steps (without improvement) required for convergence (<0 means automatic convergence check is turned off)");
233 "Use regulator to avoid over-training");
235 "Maximum times of regulator update");
237 "Calculates inverse Hessian matrix at the end of the training to be able to calculate the uncertainties of an MVA value");
240 "Take the events for the estimator calculations from small deviations from the desired value to large deviations only over the weight range");
254 <<
"Will ignore negative events in training!"
271 if (fBatchSize < 1 || fBatchSize > numEvents)
fBatchSize = numEvents;
280 Log() << kDEBUG <<
"Initialize learning rates" <<
Endl;
283 for (
Int_t i = 0;
i < numSynapses;
i++) {
296 Log() << kFATAL <<
"<CalculateEstimator> fatal error: wrong tree type: " << treeType <<
Endl;
300 Data()->SetCurrentType(treeType);
312 histS =
new TH1F( nameS, nameS, nbin, -limit, limit );
313 histB =
new TH1F( nameB, nameB, nbin, -limit, limit );
329 for (
Int_t i = 0;
i < nEvents;
i++) {
345 for (
UInt_t itgt = 0; itgt < nTgts; itgt++) {
356 for (
UInt_t icls = 0; icls < nClasses; icls++) {
358 norm += exp( activationValue );
360 d = exp( activationValue );
365 for (
UInt_t icls = 0; icls < nClasses; icls++) {
366 Double_t desired = (icls==cls) ? 1.0 : 0.0;
368 d = (desired-
v)*(desired-
v);
387 if (
DataInfo().IsSignal(ev) && histS != 0) histS->
Fill(
float(
v),
float(
w) );
388 else if (histB != 0) histB->
Fill(
float(
v),
float(
w) );
401 float deviation = (*itDev).first;
402 float devWeight = (*itDev).second;
403 weightSum += devWeight;
404 if( weightSum <= weightRangeCut ) {
405 estimator += devWeight*deviation;
409 sumOfWeights = sumOfWeightsInRange;
419 estimator = estimator/
Float_t(sumOfWeights);
424 Data()->SetCurrentType( saveType );
440 Log() << kFATAL <<
"ANN Network is not initialized, doing it now!"<<
Endl;
443 Log() << kDEBUG <<
"reinitialize learning rates" <<
Endl;
450 if (nSynapses>nEvents)
451 Log()<<kWARNING<<
"ANN too complicated: #events="<<nEvents<<
"\t#synapses="<<nSynapses<<
Endl;
455 std::vector<TString> titles = {
"Error on training set",
"Error on test set"};
459#ifdef MethodMLP_UseMinuit__
460 if (useMinuit) MinuitMinimize();
470 Log()<<kINFO<<
"Finalizing handling of Regulator terms, trainE="<<trainE<<
" testE="<<testE<<
Endl;
472 Log()<<kINFO<<
"Done with handling of Regulator terms"<<
Endl;
502 Int_t nWeights = nSynapses;
509 std::vector<Double_t> buffer( nWeights );
510 for (
Int_t i=0;
i<nWeights;
i++) buffer[
i] = 0.;
513 TMatrixD Hessian ( nWeights, nWeights );
517 Int_t RegUpdateTimes=0;
528 if (
fSteps > 0)
Log() << kINFO <<
"Inaccurate progress timing for MLP... " <<
Endl;
532 for (
Int_t i = 0;
i < nEpochs;
i++) {
541 Data()->CreateSampling();
546 Data()->CreateSampling();
552 Data()->InitSampling(1.0,1.0);
554 Data()->InitSampling(1.0,1.0);
578 else SetDir( Hessian, Dir );
593 Log() << kFATAL <<
"Line search failed! Huge troubles somewhere..." <<
Endl;
598 if (dError<0)
Log()<<kWARNING<<
"\nnegative dError=" <<dError<<
Endl;
601 if (
fUseRegulator && RegUpdateTimes<fUpdateLimit && RegUpdateCD>=5 && fabs(dError)<0.1*AccuError) {
602 Log()<<kDEBUG<<
"\n\nUpdate regulators "<<RegUpdateTimes<<
" on epoch "<<
i<<
"\tdError="<<dError<<
Endl;
627 Data()->EventResult( success );
653 if (progress2>progress) progress=progress2;
658 if (progress<
i) progress=
i;
680 Gamma[IDX++][0] = -synapse->
GetDEDw();
683 for (
Int_t i=0;
i<nWeights;
i++) Delta[
i][0] = buffer[
i];
691 Gamma[IDX++][0] += synapse->
GetDEDw();
706 Int_t nPosEvents = nEvents;
718 for (
Int_t j=0;j<nSynapses;j++) {
728 synapse->
SetDEDw( DEDw / nPosEvents );
743 for (
UInt_t itgt = 0; itgt < ntgt; itgt++) {
751 for (
UInt_t icls = 0; icls < nClasses; icls++) {
752 Double_t desired = ( cls==icls ? 1.0 : 0.0 );
781 Dir[IDX++][0] = -synapse->
GetDEDw();
816 DEDw[IDX++][0] = synapse->
GetDEDw();
819 dir = Hessian * DEDw;
820 for (
Int_t i=0;
i<IDX;
i++) dir[
i][0] = -dir[
i][0];
833 Result += Dir[IDX++][0] * synapse->
GetDEDw();
844 Int_t nWeights = nSynapses;
846 std::vector<Double_t> Origin(nWeights);
858 if (alpha2 < 0.01) alpha2 = 0.01;
859 else if (alpha2 > 2.0) alpha2 = 2.0;
893 Log() << kWARNING <<
"linesearch, starting to investigate direction opposite of steepestDIR" <<
Endl;
894 alpha2 = -alpha_original;
907 Log() << kWARNING <<
"linesearch, failed even in opposite direction of steepestDIR" <<
Endl;
913 if (alpha1>0 && alpha2>0 && alpha3 > 0) {
915 (err3 - err1) / ((err3 - err2) / ( alpha3 - alpha2 )
916 - ( err2 - err1 ) / (alpha2 - alpha1 )));
931 if (finalError > err1) {
932 Log() << kWARNING <<
"Line search increased error! Something is wrong."
933 <<
"fLastAlpha=" <<
fLastAlpha <<
"al123=" << alpha1 <<
" "
934 << alpha2 <<
" " << alpha3 <<
" err1="<< err1 <<
" errfinal=" << finalError <<
Endl;
939 buffer[IDX] = synapse->
GetWeight() - Origin[IDX];
943 if (dError) (*dError)=(errOrigin-finalError)/finalError;
957 synapse->
SetWeight( Origin[IDX] + Dir[IDX][0] * alpha );
983 for (
UInt_t itgt = 0; itgt < ntgts; itgt++) {
987 for(
UInt_t icls = 0, iclsEnd =
DataInfo().GetNClasses(); icls < iclsEnd; icls++ ){
1055 if (
fSteps > 0)
Log() << kINFO <<
"Inaccurate progress timing for MLP... " <<
Endl;
1063 for (
Int_t i = 0;
i < nEpochs;
i++) {
1072 Data()->CreateSampling();
1077 Data()->CreateSampling();
1083 Data()->InitSampling(1.0,1.0);
1085 Data()->InitSampling(1.0,1.0);
1106 Data()->EventResult( success );
1116 if (lateEpoch >
i) lateEpoch =
i;
1152 for (
Int_t i = 0;
i < nEvents;
i++) {
1212 for (
Int_t i = 0;
i < numSynapses;
i++) {
1237 else desired =
fOutput->GetMax();
1291 else Log() << kFATAL <<
"Estimator type unspecified!!" <<
Endl;
1292 error *= eventWeight;
1306 for (
UInt_t i = 0, iEnd = desired.size();
i < iEnd; ++
i) {
1312 for (
UInt_t i = 0, iEnd = desired.size();
i < iEnd; ++
i) {
1316 error *= eventWeight;
1337 for (
Int_t i = numLayers-1;
i >= 0;
i--) {
1341 for (
Int_t j = 0; j < numNeurons; j++) {
1368 std::vector<Interval*> ranges;
1371 for (
Int_t ivar=0; ivar< numWeights; ivar++) {
1379 Log() << kINFO <<
"GA: estimator after optimization: " << estimator <<
Endl;
1398 for (
Int_t i = 0;
i < numSynapses;
i++) {
1419 for (
Int_t i = 0;
i < numLayers;
i++) {
1423 for (
Int_t j = 0; j < numNeurons; j++) {
1441 for (
Int_t i = numLayers-1;
i >= 0;
i--) {
1445 for (
Int_t j = 0; j < numNeurons; j++) {
1476 std::vector<Int_t> nWDP(numRegulators);
1477 std::vector<Double_t> trace(numRegulators),weightSum(numRegulators);
1478 for (
int i=0;
i<numSynapses;
i++) {
1482 trace[idx]+=InvH[
i][
i];
1492 for (
int i=0;
i<numRegulators;
i++)
1502 Log()<<kDEBUG<<
"\n"<<
"trainE:"<<trainE<<
"\ttestE:"<<testE<<
"\tvariance:"<<variance<<
"\tgamma:"<<gamma<<
Endl;
1511 InvHessian.
ResizeTo( numSynapses, numSynapses );
1521 for (
Int_t j = 0; j < numSynapses; j++){
1525 sens[j][0]=sensT[0][j]=synapses->
GetDelta();
1528 else if (
fEstimator==
kCE) InvHessian+=(outputValue*(1-outputValue))*sens*sensT;
1533 for (
Int_t i = 0;
i < numSynapses;
i++){
1538 for (
Int_t i = 0;
i < numSynapses;
i++){
1539 InvHessian[
i][
i]+=1
e-6;
1557 Double_t MvaUpper,MvaLower,median,variance;
1560 Log() << kWARNING <<
"inconsistent dimension " <<
fInvHessian.GetNcols() <<
" vs " << numSynapses <<
Endl;
1567 for (
Int_t i = 0;
i < numSynapses;
i++){
1579 Log()<<kWARNING<<
"Negative variance!!! median=" << median <<
"\tvariance(sigma^2)=" << variance <<
Endl;
1582 variance=sqrt(variance);
1585 MvaUpper=
fOutput->Eval(median+variance);
1587 *errUpper=MvaUpper-MvaValue;
1590 MvaLower=
fOutput->Eval(median-variance);
1592 *errLower=MvaValue-MvaLower;
1598#ifdef MethodMLP_UseMinuit__
1603void TMVA::MethodMLP::MinuitMinimize()
1605 fNumberOfWeights = fSynapses->GetEntriesFast();
1620 for (
Int_t ipar=0; ipar < fNumberOfWeights; ipar++) {
1623 parName,
w[ipar], 0.1, 0, 0 );
1627 tfitter->
SetFCN( &IFCN );
1666 ((
MethodMLP*)GetThisPtr())->FCN( npars, grad,
f, fitPars, iflag );
1669TTHREAD_TLS(
Int_t) nc = 0;
1670TTHREAD_TLS(
double) minf = 1000000;
1675 for (
Int_t ipar=0; ipar<fNumberOfWeights; ipar++) {
1681 f = CalculateEstimator();
1684 if (
f < minf) minf =
f;
1685 for (
Int_t ipar=0; ipar<fNumberOfWeights; ipar++)
Log() <<
kDEBUG << fitPars[ipar] <<
" ";
1687 Log() <<
kDEBUG <<
"***** New estimator: " <<
f <<
" min: " << minf <<
" --> ncalls: " << nc <<
Endl;
1693TMVA::MethodMLP* TMVA::MethodMLP::GetThisPtr()
1721 Log() << col <<
"--- Short description:" << colres <<
Endl;
1723 Log() <<
"The MLP artificial neural network (ANN) is a traditional feed-" <<
Endl;
1724 Log() <<
"forward multilayer perceptron implementation. The MLP has a user-" <<
Endl;
1725 Log() <<
"defined hidden layer architecture, while the number of input (output)" <<
Endl;
1726 Log() <<
"nodes is determined by the input variables (output classes, i.e., " <<
Endl;
1727 Log() <<
"signal and one background). " <<
Endl;
1729 Log() << col <<
"--- Performance optimisation:" << colres <<
Endl;
1731 Log() <<
"Neural networks are stable and performing for a large variety of " <<
Endl;
1732 Log() <<
"linear and non-linear classification problems. However, in contrast" <<
Endl;
1733 Log() <<
"to (e.g.) boosted decision trees, the user is advised to reduce the " <<
Endl;
1734 Log() <<
"number of input variables that have only little discrimination power. " <<
Endl;
1736 Log() <<
"In the tests we have carried out so far, the MLP and ROOT networks" <<
Endl;
1737 Log() <<
"(TMlpANN, interfaced via TMVA) performed equally well, with however" <<
Endl;
1738 Log() <<
"a clear speed advantage for the MLP. The Clermont-Ferrand neural " <<
Endl;
1739 Log() <<
"net (CFMlpANN) exhibited worse classification performance in these" <<
Endl;
1740 Log() <<
"tests, which is partly due to the slow convergence of its training" <<
Endl;
1741 Log() <<
"(at least 10k training cycles are required to achieve approximately" <<
Endl;
1742 Log() <<
"competitive results)." <<
Endl;
1744 Log() << col <<
"Overtraining: " << colres
1745 <<
"only the TMlpANN performs an explicit separation of the" <<
Endl;
1746 Log() <<
"full training sample into independent training and validation samples." <<
Endl;
1747 Log() <<
"We have found that in most high-energy physics applications the " <<
Endl;
1748 Log() <<
"available degrees of freedom (training events) are sufficient to " <<
Endl;
1749 Log() <<
"constrain the weights of the relatively simple architectures required" <<
Endl;
1750 Log() <<
"to achieve good performance. Hence no overtraining should occur, and " <<
Endl;
1751 Log() <<
"the use of validation samples would only reduce the available training" <<
Endl;
1752 Log() <<
"information. However, if the performance on the training sample is " <<
Endl;
1753 Log() <<
"found to be significantly better than the one found with the inde-" <<
Endl;
1754 Log() <<
"pendent test sample, caution is needed. The results for these samples " <<
Endl;
1755 Log() <<
"are printed to standard output at the end of each training job." <<
Endl;
1757 Log() << col <<
"--- Performance tuning via configuration options:" << colres <<
Endl;
1759 Log() <<
"The hidden layer architecture for all ANNs is defined by the option" <<
Endl;
1760 Log() <<
"\"HiddenLayers=N+1,N,...\", where here the first hidden layer has N+1" <<
Endl;
1761 Log() <<
"neurons and the second N neurons (and so on), and where N is the number " <<
Endl;
1762 Log() <<
"of input variables. Excessive numbers of hidden layers should be avoided," <<
Endl;
1763 Log() <<
"in favour of more neurons in the first hidden layer." <<
Endl;
1765 Log() <<
"The number of cycles should be above 500. As said, if the number of" <<
Endl;
1766 Log() <<
"adjustable weights is small compared to the training sample size," <<
Endl;
1767 Log() <<
"using a large number of training samples should not lead to overtraining." <<
Endl;
#define REGISTER_METHOD(CLASS)
for example
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void w
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t target
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t index
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
TMatrixT< Double_t > TMatrixD
<div class="legacybox"><h2>Legacy Code</h2> TFitter is a legacy interface: there will be no bug fixes...
void SetFCN(void(*fcn)(Int_t &, Double_t *, Double_t &f, Double_t *, Int_t)) override
Specify the address of the fitting algorithm.
Int_t ExecuteCommand(const char *command, Double_t *args, Int_t nargs) override
Execute a fitter command; command : command string args : list of nargs command arguments.
Int_t SetParameter(Int_t ipar, const char *parname, Double_t value, Double_t verr, Double_t vlow, Double_t vhigh) override
set initial values for a parameter
1-D histogram with a float per channel (see TH1 documentation)
TH1 is the base class of all histogram classes in ROOT.
virtual Int_t Fill(Double_t x)
Increment bin with abscissa X by 1.
Bool_t WriteOptionsReference() const
OptionBase * DeclareOptionRef(T &ref, const TString &name, const TString &desc="")
void AddPreDefVal(const T &)
const TString & GetOptions() const
Bool_t HasConverged(Bool_t withinConvergenceBand=kFALSE)
gives back true if the last "steps" steps have lead to an improvement of the "fitness" of the "indivi...
void SetCurrentValue(Float_t value)
Float_t Progress()
returns a float from 0 (just started) to 1 (finished)
Float_t GetCurrentValue()
void ResetConvergenceCounter()
Float_t fImprovement
! minimum improvement which counts as improvement
Int_t fSteps
! number of steps without improvement required for convergence
Class that contains all the data information.
std::vector< Float_t > & GetTargets()
Double_t GetWeight() const
return the event weight - depending on whether the flag IgnoreNegWeightsInTraining is or not.
Float_t GetTarget(UInt_t itgt) const
Base class for TMVA fitters.
Double_t Run()
estimator function interface for fitting
Fitter using a Genetic Algorithm.
The TMVA::Interval Class.
std::vector< TH1 * > fEpochMonHistW
std::vector< TH1 * > fEpochMonHistB
virtual void ProcessOptions()
do nothing specific at this moment
virtual Double_t GetMvaValue(Double_t *err=nullptr, Double_t *errUpper=nullptr)
get the mva value generated by the NN
TNeuron * GetInputNeuron(Int_t index)
void WaitForKeyboard()
wait for keyboard input, for debugging
MethodANNBase(const TString &jobName, Types::EMVA methodType, const TString &methodTitle, DataSetInfo &theData, const TString &theOption)
standard constructor Note: Right now it is an option to choose the neuron input function,...
TNeuron * GetOutputNeuron(Int_t index=0)
void PrintMessage(TString message, Bool_t force=kFALSE) const
print messages, turn off printing by setting verbose and debug flag appropriately
std::vector< Int_t > fRegulatorIdx
std::vector< Double_t > fRegulators
TH1F * fEstimatorHistTest
std::vector< TH1 * > fEpochMonHistS
Int_t fRandomSeed
random seed for initial synapse weights
TH1F * fEstimatorHistTrain
virtual void MakeClassSpecific(std::ostream &, const TString &) const
write specific classifier response
void ForceNetworkCalculations()
calculate input values to each neuron
void ForceNetworkInputs(const Event *ev, Int_t ignoreIndex=-1)
force the input values of the input neurons force the value for each input neuron
virtual void PrintNetwork() const
print network representation, for debugging
void CreateWeightMonitoringHists(const TString &bulkname, std::vector< TH1 * > *hv=nullptr) const
Double_t GetXmin(Int_t ivar) const
Bool_t DoMulticlass() const
const char * GetName() const
Types::EAnalysisType GetAnalysisType() const
Bool_t IgnoreEventsWithNegWeightsInTraining() const
UInt_t GetNTargets() const
virtual void SetAnalysisType(Types::EAnalysisType type)
UInt_t GetNEvents() const
Bool_t DoRegression() const
const Event * GetEvent() const
DataSetInfo & DataInfo() const
Double_t GetXmax(Int_t ivar) const
Bool_t IsSilentFile() const
void SetSignalReferenceCut(Double_t cut)
Bool_t IsNormalised() const
IPythonInteractive * fInteractive
temporary dataset used when evaluating on a different data (used by MethodCategory::GetMvaValues)
Multilayer Perceptron class built off of MethodANNBase.
Int_t fResetStep
reset time (how often we clear hessian matrix)
bool fCalculateErrors
compute inverse hessian matrix at the end of the training
std::vector< std::pair< Float_t, Float_t > > * fDeviationsFromTargets
deviation from the targets, event weight
Double_t GetMvaValue(Double_t *err=nullptr, Double_t *errUpper=nullptr)
get the mva value generated by the NN
Double_t fTau
line search variable
Int_t fGA_SC_rate
GA settings: SC_rate.
Float_t fWeightRange
suppress outliers for the estimator calculation
Float_t fSamplingWeight
changing factor for event weights when sampling is turned on
Int_t fBatchSize
batch size, only matters if in batch learning mode
void GetHelpMessage() const
get help message text
void BackPropagationMinimize(Int_t nEpochs)
minimize estimator / train network with back propagation algorithm
Double_t GetMSEErr(const Event *ev, UInt_t index=0)
zjh
void MakeClassSpecific(std::ostream &, const TString &) const
write specific classifier response
void AdjustSynapseWeights()
just adjust the synapse weights (should be called in batch mode)
std::vector< Double_t > fPriorDev
zjh
TString fBpModeS
backprop learning mode option string (sequential or batch)
void SteepestDir(TMatrixD &Dir)
void TrainOneEpoch()
train network over a single epoch/cycle of events
virtual Bool_t HasAnalysisType(Types::EAnalysisType type, UInt_t numberClasses, UInt_t numberTargets)
MLP can handle classification with 2 classes and regression with one regression-target.
TString fTrainMethodS
training method option param
Int_t fGA_nsteps
GA settings: number of steps.
Bool_t GetHessian(TMatrixD &Hessian, TMatrixD &Gamma, TMatrixD &Delta)
Double_t ComputeEstimator(std::vector< Double_t > ¶meters)
this function is called by GeneticANN for GA optimization
static const Bool_t fgPRINT_BATCH
debug flags
void InitializeLearningRates()
initialize learning rates of synapses, used only by back propagation
Int_t fGA_preCalc
GA settings: number of pre-calc steps.
void CalculateNeuronDeltas()
have each neuron calculate its delta by back propagation
Int_t fTestRate
test for overtraining performed at each #th epochs
Double_t fDecayRate
decay rate for above learning rate
ETrainingMethod fTrainingMethod
method of training, BP or GA
EBPTrainingMode fBPMode
backprop learning mode (sequential or batch)
Double_t DerivDir(TMatrixD &Dir)
Double_t fGA_SC_factor
GA settings: SC_factor.
Double_t GetCEErr(const Event *ev, UInt_t index=0)
zjh
virtual ~MethodMLP()
destructor nothing to be done
Int_t fGA_SC_steps
GA settings: SC_steps.
void SetDir(TMatrixD &Hessian, TMatrixD &Dir)
void Shuffle(Int_t *index, Int_t n)
Input:
Bool_t fSamplingTraining
The training sample is sampled.
void SimulateEvent(const Event *ev)
void SetDirWeights(std::vector< Double_t > &Origin, TMatrixD &Dir, Double_t alpha)
void SetGammaDelta(TMatrixD &Gamma, TMatrixD &Delta, std::vector< Double_t > &Buffer)
Double_t EstimatorFunction(std::vector< Double_t > ¶meters)
interface to the estimate
Double_t fLearnRate
learning rate for synapse weight adjustments
void GetApproxInvHessian(TMatrixD &InvHessian, bool regulate=true)
rank-1 approximation, neglect 2nd derivatives. //zjh
void BFGSMinimize(Int_t nEpochs)
train network with BFGS algorithm
void UpdateSynapses()
update synapse error fields and adjust the weights (if in sequential mode)
void Init()
default initializations
void ProcessOptions()
process user options
Float_t fSamplingFraction
fraction of events which is sampled for training
void TrainOneEvent(Int_t ievt)
train network over a single event this uses the new event model
Double_t GetDesiredOutput(const Event *ev)
get the desired output of this event
void GeneticMinimize()
create genetics class similar to GeneticCut give it vector of parameter ranges (parameters = weights)...
Bool_t fSamplingTesting
The testing sample is sampled.
Double_t fLastAlpha
line search variable
Float_t fSamplingEpoch
fraction of epochs where sampling is used
void DecaySynapseWeights(Bool_t lateEpoch)
decay synapse weights in last 10 epochs, lower learning rate even more to find a good minimum
void TrainOneEventFast(Int_t ievt, Float_t *&branchVar, Int_t &type)
fast per-event training
Bool_t fEpochMon
create and fill epoch-wise monitoring histograms (makes outputfile big!)
void UpdateNetwork(Double_t desired, Double_t eventWeight=1.0)
update the network based on how closely the output matched the desired output
MethodMLP(const TString &jobName, const TString &methodTitle, DataSetInfo &theData, const TString &theOption)
standard constructor
void UpdateRegulators()
zjh
Bool_t LineSearch(TMatrixD &Dir, std::vector< Double_t > &Buffer, Double_t *dError=nullptr)
zjh
void DeclareOptions()
define the options (their key words) that can be set in the option string
Double_t CalculateEstimator(Types::ETreeType treeType=Types::kTraining, Int_t iEpoch=-1)
calculate the estimator that training is attempting to minimize
static const Bool_t fgPRINT_SEQ
debug flags
Neuron class used by TMVA artificial neural network methods.
void AdjustSynapseWeights()
adjust the pre-synapses' weights for each neuron (input neuron has no pre-synapse) this method should...
void ForceValue(Double_t value)
force the value, typically for input and bias neurons
void UpdateSynapsesSequential()
update the pre-synapses for each neuron (input neuron has no pre-synapse) this method should only be ...
void UpdateSynapsesBatch()
update and adjust the pre-synapses for each neuron (input neuron has no pre-synapse) this method shou...
void CalculateDelta()
calculate error field
Synapse class used by TMVA artificial neural network methods.
void SetWeight(Double_t weight)
set synapse weight
void SetDEDw(Double_t DEDw)
void SetLearningRate(Double_t rate)
void DecayLearningRate(Double_t rate)
void CalculateDelta()
calculate/adjust the error field for this synapse
Timing information for training and evaluation of MVA methods.
void DrawProgressBar(Int_t, const TString &comment="")
draws progress bar in color or B&W caution:
Singleton class for Global types used by TMVA.
virtual TMatrixTBase< Element > & UnitMatrix()
Make a unit matrix (matrix need not be a square one).
TMatrixT< Element > & Transpose(const TMatrixT< Element > &source)
Transpose matrix source.
TMatrixTBase< Element > & ResizeTo(Int_t nrows, Int_t ncols, Int_t=-1) override
Set size of the matrix to nrows x ncols New dynamic elements are created, the overlapping part of the...
TMatrixT< Element > & Invert(Double_t *det=nullptr)
Invert the matrix and calculate its determinant.
Int_t GetEntriesFast() const
TObject * At(Int_t idx) const override
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
void SetWeight(Double_t w)
Sets the weight of the synapse.
MsgLogger & Endl(MsgLogger &ml)
Double_t Exp(Double_t x)
Returns the base-e exponential function of x, which is e raised to the power x.
Double_t Log(Double_t x)
Returns the natural logarithm of x.
Double_t Sqrt(Double_t x)
Returns the square root of x.