87: 
TMVA::
MethodBase( jobName, methodType, methodTitle, theData, theOption)
 
  127   DeclareOptionRef( fNcycles    = 500,       
"NCycles",         
"Number of training cycles" );
 
  128   DeclareOptionRef( fLayerSpec  = 
"N,N-1",   
"HiddenLayers",    
"Specification of hidden layer architecture" );
 
  129   DeclareOptionRef( fNeuronType = 
"sigmoid", 
"NeuronType",      
"Neuron activation function type" );
 
  130   DeclareOptionRef( fRandomSeed = 1, 
"RandomSeed", 
"Random seed for initial synapse weights (0 means unique seed for each run; default value '1')");
 
  132   DeclareOptionRef(fEstimatorS=
"MSE", 
"EstimatorType",
 
  133                    "MSE (Mean Square Estimator) for Gaussian Likelihood or CE(Cross-Entropy) for Bernoulli Likelihood" ); 
 
  140   Int_t nTypes = names->size();
 
  141   for (
Int_t i = 0; i < nTypes; i++)
 
  142      AddPreDefVal(names->at(i));
 
  145   DeclareOptionRef(fNeuronInputType=
"sum", 
"NeuronInputType",
"Neuron input function type");
 
  148   nTypes = names->size();
 
  149   for (
Int_t i = 0; i < nTypes; i++) AddPreDefVal(names->at(i));
 
  159   if      ( DoRegression() || DoMulticlass())  fEstimatorS = 
"MSE";    
 
  160   else    fEstimatorS = 
"CE" ;                                         
 
  161   if      (fEstimatorS == 
"MSE" )  fEstimator = kMSE;
 
  162   else if (fEstimatorS == 
"CE")    fEstimator = kCE;      
 
  163   std::vector<Int_t>* layout = ParseLayoutString(fLayerSpec);
 
  164   BuildNetwork(layout);
 
  174   std::vector<Int_t>* layout = 
new std::vector<Int_t>();
 
  175   layout->push_back((
Int_t)GetNvar());
 
  176   while(layerSpec.
Length()>0) {
 
  178      if (layerSpec.
First(
',')<0) {
 
  183         sToAdd = layerSpec(0,layerSpec.
First(
','));
 
  184         layerSpec = layerSpec(layerSpec.
First(
',')+1,layerSpec.
Length());
 
  188      nNodes += atoi(sToAdd);
 
  189      layout->push_back(nNodes);
 
  192      layout->push_back( DataInfo().GetNTargets() );  
 
  193   else if( DoMulticlass() )
 
  194      layout->push_back( DataInfo().GetNClasses() );  
 
  196      layout->push_back(1);  
 
  211   fInputCalculator = NULL;
 
  213   fEstimatorHistTrain = NULL;
 
  214   fEstimatorHistTest  = NULL;
 
  217   fEpochMonHistS.clear();
 
  218   fEpochMonHistB.clear();
 
  219   fEpochMonHistW.clear();
 
  223   fOutputNeurons.clear();
 
  243   if (fNetwork != NULL) {
 
  245      Int_t numLayers = fNetwork->GetEntriesFast();
 
  246      for (
Int_t i = 0; i < numLayers; i++) {
 
  248         DeleteNetworkLayer(layer);
 
  253   if (frgen != NULL)            
delete frgen;
 
  254   if (fActivation != NULL)      
delete fActivation;
 
  255   if (fOutput != NULL)          
delete fOutput;  
 
  256   if (fIdentity != NULL)        
delete fIdentity;
 
  257   if (fInputCalculator != NULL) 
delete fInputCalculator;
 
  258   if (fSynapses != NULL)        
delete fSynapses;
 
  265   fInputCalculator = NULL;
 
  276   for (
Int_t i = 0; i < numNeurons; i++) {
 
  290   if (fEstimatorS == 
"MSE")  fEstimator = kMSE;    
 
  291   else if (fEstimatorS == 
"CE")    fEstimator = kCE;      
 
  292   else Log()<<kWARNING<<
"fEstimator="<<fEstimator<<
"\tfEstimatorS="<<fEstimatorS<<
Endl;
 
  293   if (fEstimator!=kMSE && fEstimator!=kCE) Log()<<kWARNING<<
"Estimator type unspecified \t"<<
Endl; 
 
  296   Log() << kHEADER << 
"Building Network. " << 
Endl;
 
  311   fRegulatorIdx.clear();
 
  313   BuildLayers( layout, fromFile );
 
  316   fInputLayer   = (
TObjArray*)fNetwork->At(0);
 
  318   fOutputNeurons.clear();
 
  320      fOutputNeurons.push_back( (
TNeuron*)outputLayer->
At(i) );
 
  323   if (weights == NULL) InitWeights();
 
  324   else                 ForceWeights(weights);
 
  335   Int_t numLayers = layout->size();
 
  337   for (
Int_t i = 0; i < numLayers; i++) {
 
  339      BuildLayer(layout->at(i), curLayer, prevLayer, i, numLayers, fromFile);
 
  340      prevLayer = curLayer;
 
  341      fNetwork->
Add(curLayer);
 
  345   for (
Int_t i = 0; i < numLayers; i++) {
 
  348      if (i!=0 && i!=numLayers-1) fRegulators.push_back(0.);  
 
  349      for (
Int_t j = 0; j < numNeurons; j++) {
 
  350         if (i==0) fRegulators.push_back(0.);
 
  353         for (
Int_t k = 0; k < numSynapses; k++) {
 
  355            fSynapses->Add(synapse);
 
  356            fRegulatorIdx.push_back(fRegulators.size()-1);
 
  371   for (
Int_t j = 0; j < numNeurons; j++) {
 
  372      if (fromFile && (layerIndex != numLayers-1) && (j==numNeurons-1)){
 
  377         curLayer->
Add(neuron);
 
  384         if (layerIndex == 0) {
 
  390            if (layerIndex == numLayers-1) {
 
  396            AddPreLinks(neuron, prevLayer);
 
  399         curLayer->
Add(neuron);
 
  405      if (layerIndex != numLayers-1) {
 
  410         curLayer->
Add(neuron);
 
  424   for (
Int_t i = 0; i < numNeurons; i++) {
 
  439  PrintMessage(
"Initializing weights");
 
  442   Int_t numSynapses = fSynapses->GetEntriesFast();
 
  444   for (
Int_t i = 0; i < numSynapses; i++) {
 
  445      synapse = (
TSynapse*)fSynapses->At(i);
 
  446      synapse->
SetWeight(4.0*frgen->Rndm() - 2.0);
 
  455   PrintMessage(
"Forcing weights");
 
  457   Int_t numSynapses = fSynapses->GetEntriesFast();
 
  459   for (
Int_t i = 0; i < numSynapses; i++) {
 
  460      synapse = (
TSynapse*)fSynapses->At(i);
 
  475   for (
UInt_t j = 0; j < GetNvar(); j++) {
 
  479      neuron = GetInputNeuron(j);
 
  491   Int_t numLayers = fNetwork->GetEntriesFast();
 
  494   for (
Int_t i = 0; i < numLayers; i++) {
 
  498      for (
Int_t j = 0; j < numNeurons; j++) {
 
  512   if (Verbose() || 
Debug() || force) Log() << kINFO << message << 
Endl;
 
  521   Log() << kINFO << 
"***Type anything to continue (q to quit): ";
 
  522   std::getline(std::cin, dummy);
 
  523   if (dummy == 
"q" || dummy == 
"Q") {
 
  524      PrintMessage( 
"quit" );
 
  535   if (!
Debug()) 
return;
 
  537   Log() << kINFO << 
Endl;
 
  538   PrintMessage( 
"Printing network " );
 
  539   Log() << kINFO << 
"-------------------------------------------------------------------" << 
Endl;
 
  542   Int_t numLayers = fNetwork->GetEntriesFast();
 
  544   for (
Int_t i = 0; i < numLayers; i++) {
 
  549      Log() << kINFO << 
"Layer #" << i << 
" (" << numNeurons << 
" neurons):" << 
Endl;
 
  550      PrintLayer( curLayer );
 
  562   for (
Int_t j = 0; j < numNeurons; j++) {
 
  564      Log() << kINFO << 
"\tNeuron #" << j << 
" (LinksIn: " << neuron->
NumPreLinks()
 
  566      PrintNeuron( neuron );
 
  576         << 
"\t\tValue:\t"     << neuron->
GetValue()
 
  579   Log() << kINFO << 
"\t\tActivationEquation:\t";
 
  581   Log() << kINFO << 
"\t\tLinksIn:" << 
Endl;
 
  583   Log() << kINFO << 
"\t\tLinksOut:" << 
Endl;
 
  596   const Event * ev = GetEvent();
 
  598   for (
UInt_t i = 0; i < GetNvar(); i++) {
 
  602   ForceNetworkCalculations();
 
  609   NoErrorCalc(err, errUpper);
 
  623   const Event * ev = GetEvent();
 
  625   for (
UInt_t i = 0; i < GetNvar(); i++) {
 
  629   ForceNetworkCalculations();
 
  634   if (fRegressionReturnVal == NULL) fRegressionReturnVal = 
new std::vector<Float_t>();
 
  635   fRegressionReturnVal->clear();
 
  639   for (
UInt_t itgt = 0; itgt < ntgts; itgt++) {
 
  643   const Event* evT2 = GetTransformationHandler().InverseTransform( evT );
 
  644   for (
UInt_t itgt = 0; itgt < ntgts; itgt++) {
 
  645      fRegressionReturnVal->push_back( evT2->
GetTarget(itgt) );
 
  650   return *fRegressionReturnVal;
 
  662   const Event * ev = GetEvent();
 
  664   for (
UInt_t i = 0; i < GetNvar(); i++) {
 
  668   ForceNetworkCalculations();
 
  672   if (fMulticlassReturnVal == NULL) fMulticlassReturnVal = 
new std::vector<Float_t>();
 
  673   fMulticlassReturnVal->clear();
 
  674   std::vector<Float_t> temp;
 
  676   UInt_t nClasses = DataInfo().GetNClasses();
 
  677   for (
UInt_t icls = 0; icls < nClasses; icls++) {
 
  678      temp.push_back(GetOutputNeuron( icls )->GetActivationValue() );
 
  681   for(
UInt_t iClass=0; iClass<nClasses; iClass++){
 
  683      for(
UInt_t j=0;j<nClasses;j++){
 
  685            norm+=exp(temp[j]-temp[iClass]);
 
  687      (*fMulticlassReturnVal).push_back(1.0/(1.0+norm));
 
  692   return *fMulticlassReturnVal;
 
  701   Int_t numLayers = fNetwork->GetEntriesFast();
 
  706   for (
Int_t i = 0; i < numLayers; i++) {
 
  712      for (
Int_t j = 0; j < numNeurons; j++) {
 
  717         if(numSynapses==0) 
continue;
 
  718         std::stringstream s(
"");
 
  720         for (
Int_t k = 0; k < numSynapses; k++) {
 
  722            s << std::scientific << synapse->
GetWeight() << 
" ";
 
  729   if( fInvHessian.GetNcols()>0 ){
 
  733      Int_t nElements = fInvHessian.GetNoElements();
 
  734      Int_t nRows     = fInvHessian.GetNrows();
 
  735      Int_t nCols     = fInvHessian.GetNcols();
 
  742      fInvHessian.GetMatrix2Array( elements );
 
  746      for( 
Int_t row = 0; row < nRows; ++row ){
 
  751         std::stringstream s(
"");
 
  753         for( 
Int_t col = 0; col < nCols; ++col ){
 
  754            s << std::scientific << (*(elements+
index)) << 
" ";
 
  771   std::vector<Int_t>* layout = 
new std::vector<Int_t>();
 
  773   void* xmlLayout = NULL;
 
  776      xmlLayout = wghtnode;
 
  780   layout->resize( nLayers );
 
  788      layout->at(
index) = nNeurons;
 
  792   BuildNetwork( layout, NULL, fromFile );
 
  795   if (GetTrainingTMVAVersionCode() < 
TMVA_VERSION(4,2,1) && fActivation->GetExpression().Contains(
"tanh")){
 
  817            std::stringstream s(content);
 
  818            for (
UInt_t iSyn = 0; iSyn<nSyn; iSyn++) { 
 
  835   void* xmlInvHessian = NULL;
 
  841   fUseRegulator = 
kTRUE;
 
  851   fInvHessian.ResizeTo( nRows, nCols );
 
  855   if (nElements > std::numeric_limits<int>::max()-100){
 
  856      Log() << kFATAL << 
"you tried to read a hessian matrix with " << nElements << 
" elements, --> too large, guess s.th. went wrong reading from the weight file" << 
Endl;
 
  859      elements = 
new Double_t[nElements+10];
 
  872      std::stringstream s(content);
 
  873      for (
Int_t iCol = 0; iCol<nCols; iCol++) { 
 
  874         s >> (*(elements+
index));
 
  881   fInvHessian.SetMatrixArray( elements );
 
  897   std::vector<Double_t>* weights = 
new std::vector<Double_t>();
 
  899   while (istr>> dummy >> weight) weights->push_back(weight); 
 
  901   ForceWeights(weights);
 
  913   fRanking = 
new Ranking( GetName(), 
"Importance" );
 
  920   for (
UInt_t ivar = 0; ivar < GetNvar(); ivar++) {
 
  922      neuron = GetInputNeuron(ivar);
 
  925      varName = GetInputVar(ivar); 
 
  930                  meanS, meanB, rmsS, rmsB, 
xmin, 
xmax );
 
  934      if (avgVal<meanrms) avgVal = meanrms;
 
  935      if (IsNormalised()) avgVal = 0.5*(1 + 
gTools().
NormVariable( avgVal, GetXmin( ivar ), GetXmax( ivar )));
 
  937      for (
Int_t j = 0; j < numSynapses; j++) {
 
  942      importance *= avgVal * avgVal;
 
  944      fRanking->AddRank( 
Rank( varName, importance ) );
 
  953                                                       std::vector<TH1*>* hv )
 const 
  956   Int_t numLayers = fNetwork->GetEntriesFast();
 
  958   for (
Int_t i = 0; i < numLayers-1; i++) {
 
  967                      numNeurons1, 0, numNeurons1, numNeurons2, 0, numNeurons2);
 
  969      for (
Int_t j = 0; j < numNeurons1; j++) {
 
  974         for (
Int_t k = 0; k < numSynapses; k++) {
 
  982      if (hv) hv->push_back( hist );
 
  995   PrintMessage(
Form(
"Write special histos to file: %s", BaseDir()->GetPath()), 
kTRUE);
 
  997   if (fEstimatorHistTrain) fEstimatorHistTrain->Write();
 
  998   if (fEstimatorHistTest ) fEstimatorHistTest ->Write();
 
 1001   CreateWeightMonitoringHists( 
"weights_hist" );
 
 1004   static std::atomic<int> epochMonitoringDirectoryNumber{0};
 
 1005   int epochVal = epochMonitoringDirectoryNumber++;
 
 1008      epochdir = BaseDir()->
mkdir( 
"EpochMonitoring" );
 
 1010      epochdir = BaseDir()->
mkdir( 
Form(
"EpochMonitoring_%4d",epochVal) );
 
 1013   for (std::vector<TH1*>::const_iterator it = fEpochMonHistS.begin(); it != fEpochMonHistS.end(); ++it) {
 
 1017   for (std::vector<TH1*>::const_iterator it = fEpochMonHistB.begin(); it != fEpochMonHistB.end(); ++it) {
 
 1021   for (std::vector<TH1*>::const_iterator it = fEpochMonHistW.begin(); it != fEpochMonHistW.end(); ++it) {
 
 1033   Int_t numLayers = fNetwork->GetEntries();
 
 1036   fout << 
"   double ActivationFnc(double x) const;" << std::endl;
 
 1037   fout << 
"   double OutputActivationFnc(double x) const;" << std::endl;     
 
 1039   int numNodesFrom = -1;
 
 1040   for (
Int_t lIdx = 0; lIdx < numLayers; lIdx++) {
 
 1041      int numNodesTo = ((
TObjArray*)fNetwork->At(lIdx))->GetEntries();
 
 1042      if (numNodesFrom<0) { numNodesFrom=numNodesTo; 
continue; }
 
 1043      fout << 
"   double fWeightMatrix" << lIdx-1  << 
"to" << lIdx << 
"[" << numNodesTo << 
"][" << numNodesFrom << 
"];";
 
 1044      fout << 
"   // weight matrix from layer " << lIdx-1  << 
" to " << lIdx << std::endl;
 
 1045      numNodesFrom = numNodesTo;
 
 1048   fout << 
"};" << std::endl;
 
 1052   fout << 
"inline void " << className << 
"::Initialize()" << std::endl;
 
 1053   fout << 
"{" << std::endl;
 
 1054   fout << 
"   // build network structure" << std::endl;
 
 1056   for (
Int_t i = 0; i < numLayers-1; i++) {
 
 1057      fout << 
"   // weight matrix from layer " << i  << 
" to " << i+1 << std::endl;
 
 1060      for (
Int_t j = 0; j < numNeurons; j++) {
 
 1063         for (
Int_t k = 0; k < numSynapses; k++) {
 
 1065            fout << 
"   fWeightMatrix" << i  << 
"to" << i+1 << 
"[" << k << 
"][" << j << 
"] = " << synapse->
GetWeight() << 
";" << std::endl;
 
 1070   fout << 
"}" << std::endl;
 
 1074   fout << 
"inline double " << className << 
"::GetMvaValue__( const std::vector<double>& inputValues ) const" << std::endl;
 
 1075   fout << 
"{" << std::endl;
 
 1076   fout << 
"   if (inputValues.size() != (unsigned int)" << ((
TObjArray *)fNetwork->At(0))->GetEntries() - 1 << 
") {" 
 1078   fout << 
"      std::cout << \"Input vector needs to be of size \" << " 
 1079        << ((
TObjArray *)fNetwork->At(0))->GetEntries() - 1 << 
" << std::endl;" << std::endl;
 
 1080   fout << 
"      return 0;" << std::endl;
 
 1081   fout << 
"   }" << std::endl;
 
 1083   for (
Int_t lIdx = 1; lIdx < numLayers; lIdx++) {
 
 1086      fout << 
"   std::array<double, " << numNodes << 
"> fWeights" << lIdx << 
" {{}};" << std::endl;
 
 1088   for (
Int_t lIdx = 1; lIdx < numLayers - 1; lIdx++) {
 
 1089      fout << 
"   fWeights" << lIdx << 
".back() = 1.;" << std::endl;
 
 1092   for (
Int_t i = 0; i < numLayers - 1; i++) {
 
 1093      fout << 
"   // layer " << i << 
" to " << i + 1 << std::endl;
 
 1094      if (i + 1 == numLayers - 1) {
 
 1095         fout << 
"   for (int o=0; o<" << ((
TObjArray *)fNetwork->At(i + 1))->GetEntries() << 
"; o++) {" << std::endl;
 
 1097         fout << 
"   for (int o=0; o<" << ((
TObjArray *)fNetwork->At(i + 1))->GetEntries() - 1 << 
"; o++) {" 
 1101         fout << 
"      std::array<double, " << ((
TObjArray *)fNetwork->At(i))->GetEntries()
 
 1102              << 
"> buffer; // no need to initialise" << std::endl;
 
 1103         fout << 
"      for (int i = 0; i<" << ((
TObjArray *)fNetwork->At(i))->GetEntries() << 
" - 1; i++) {" 
 1105         fout << 
"         buffer[i] = fWeightMatrix" << i << 
"to" << i + 1 << 
"[o][i] * inputValues[i];" << std::endl;
 
 1106         fout << 
"      } // loop over i" << std::endl;
 
 1107         fout << 
"      buffer.back() = fWeightMatrix" << i << 
"to" << i + 1 << 
"[o][" 
 1108              << ((
TObjArray *)fNetwork->At(i))->GetEntries() - 1 << 
"];" << std::endl;
 
 1110         fout << 
"      std::array<double, " << ((
TObjArray *)fNetwork->At(i))->GetEntries()
 
 1111              << 
"> buffer; // no need to initialise" << std::endl;
 
 1112         fout << 
"      for (int i=0; i<" << ((
TObjArray *)fNetwork->At(i))->GetEntries() << 
"; i++) {" << std::endl;
 
 1113         fout << 
"         buffer[i] = fWeightMatrix" << i << 
"to" << i + 1 << 
"[o][i] * fWeights" << i << 
"[i];" 
 1115         fout << 
"      } // loop over i" << std::endl;
 
 1117      fout << 
"      for (int i=0; i<" << ((
TObjArray *)fNetwork->At(i))->GetEntries() << 
"; i++) {" << std::endl;
 
 1118      if (fNeuronInputType == 
"sum") {
 
 1119         fout << 
"         fWeights" << i + 1 << 
"[o] += buffer[i];" << std::endl;
 
 1120      } 
else if (fNeuronInputType == 
"sqsum") {
 
 1121         fout << 
"         fWeights" << i + 1 << 
"[o] += buffer[i]*buffer[i];" << std::endl;
 
 1123         fout << 
"         fWeights" << i + 1 << 
"[o] += fabs(buffer[i]);" << std::endl;
 
 1125      fout << 
"      } // loop over i" << std::endl;
 
 1126      fout << 
"    } // loop over o" << std::endl;
 
 1127      if (i + 1 == numLayers - 1) {
 
 1128         fout << 
"   for (int o=0; o<" << ((
TObjArray *)fNetwork->At(i + 1))->GetEntries() << 
"; o++) {" << std::endl;
 
 1130         fout << 
"   for (int o=0; o<" << ((
TObjArray *)fNetwork->At(i + 1))->GetEntries() - 1 << 
"; o++) {" 
 1133      if (i+1 != numLayers-1) 
 
 1134         fout << 
"      fWeights" << i + 1 << 
"[o] = ActivationFnc(fWeights" << i + 1 << 
"[o]);" << std::endl;
 
 1136         fout << 
"      fWeights" << i + 1 << 
"[o] = OutputActivationFnc(fWeights" << i + 1 << 
"[o]);" 
 1138      fout << 
"   } // loop over o" << std::endl;
 
 1141   fout << 
"   return fWeights" << numLayers - 1 << 
"[0];" << std::endl;
 
 1142   fout << 
"}" << std::endl;
 
 1145   TString fncName = className+
"::ActivationFnc";
 
 1146   fActivation->MakeFunction(fout, fncName);
 
 1147   fncName = className+
"::OutputActivationFnc";   
 
 1148   fOutput->MakeFunction(fout, fncName);
 
 1151   fout << 
"// Clean up" << std::endl;
 
 1152   fout << 
"inline void " << className << 
"::Clear()" << std::endl;
 
 1153   fout << 
"{" << std::endl;
 
 1154   fout << 
"}" << std::endl;
 
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
 
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
 
void Debug(Int_t level, const char *fmt,...)
 
#define TMVA_VERSION(a, b, c)
 
Describe directory structure in memory.
 
virtual Bool_t cd()
Change current directory to "this" directory.
 
virtual TDirectory * mkdir(const char *name, const char *title="", Bool_t returnExistingDirectory=kFALSE)
Create a sub-directory "a" or a hierarchy of sub-directories "a/b/c/...".
 
2-D histogram with a float per channel (see TH1 documentation)}
 
void SetBinContent(Int_t bin, Double_t content) override
Set bin content.
 
Class that contains all the data information.
 
Float_t GetValue(UInt_t ivar) const
return value of i'th variable
 
void SetTarget(UInt_t itgt, Float_t value)
set the target value (dimension itgt) to value
 
Float_t GetTarget(UInt_t itgt) const
 
Base class for all TMVA methods using artificial neural networks.
 
std::vector< Int_t > * ParseLayoutString(TString layerSpec)
parse layout specification string and return a vector, each entry containing the number of neurons to...
 
virtual void ProcessOptions()
do nothing specific at this moment
 
virtual ~MethodANNBase()
destructor
 
virtual Double_t GetMvaValue(Double_t *err=nullptr, Double_t *errUpper=nullptr)
get the mva value generated by the NN
 
void DeleteNetworkLayer(TObjArray *&layer)
delete a network layer
 
virtual void BuildNetwork(std::vector< Int_t > *layout, std::vector< Double_t > *weights=nullptr, Bool_t fromFile=kFALSE)
build network given a layout (number of neurons in each layer) and optional weights array
 
const Ranking * CreateRanking()
compute ranking of input variables by summing function of weights
 
void DeleteNetwork()
delete/clear network
 
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,...
 
void AddPreLinks(TNeuron *neuron, TObjArray *prevLayer)
add synapses connecting a neuron to its preceding layer
 
void PrintNeuron(TNeuron *neuron) const
print a neuron, for debugging
 
void PrintMessage(TString message, Bool_t force=kFALSE) const
print messages, turn off printing by setting verbose and debug flag appropriately
 
void AddWeightsXMLTo(void *parent) const
create XML description of ANN classifier
 
void InitANNBase()
initialize ANNBase object
 
void PrintLayer(TObjArray *layer) const
print a single layer, for debugging
 
void InitWeights()
initialize the synapse weights randomly
 
virtual void DeclareOptions()
define the options (their key words) that can be set in the option string here the options valid for ...
 
virtual void ReadWeightsFromStream(std::istream &istr)
destroy/clear the network then read it back in from the weights file
 
void BuildLayers(std::vector< Int_t > *layout, Bool_t from_file=false)
build the network layers
 
virtual void MakeClassSpecific(std::ostream &, const TString &) const
write specific classifier response
 
void ForceWeights(std::vector< Double_t > *weights)
force the synapse weights
 
void BuildLayer(Int_t numNeurons, TObjArray *curLayer, TObjArray *prevLayer, Int_t layerIndex, Int_t numLayers, Bool_t from_file=false)
build a single layer with neurons and synapses connecting this layer to the previous layer
 
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 const std::vector< Float_t > & GetMulticlassValues()
get the multiclass classification values generated by the NN
 
void ReadWeightsFromXML(void *wghtnode)
read MLP from xml weight file
 
Bool_t Debug() const
who the hell makes such strange Debug flags that even use "global pointers"..
 
virtual void WriteMonitoringHistosToFile() const
write histograms to file
 
virtual const std::vector< Float_t > & GetRegressionValues()
get the regression value generated by the NN
 
virtual void PrintNetwork() const
print network representation, for debugging
 
void CreateWeightMonitoringHists(const TString &bulkname, std::vector< TH1 * > *hv=nullptr) const
 
Virtual base Class for all MVA method.
 
Ranking for variables in method (implementation)
 
Class for easily choosing activation functions.
 
std::vector< TString > * GetAllActivationNames() const
returns the names of all know activation functions
 
TActivation * CreateActivation(EActivationType type) const
instantiate the correct activation object according to the type chosen (given as the enumeration type...
 
Tanh activation function for ANN.
 
Neuron class used by TMVA artificial neural network methods.
 
Double_t GetActivationValue() const
 
void ForceValue(Double_t value)
force the value, typically for input and bias neurons
 
TSynapse * PostLinkAt(Int_t index) const
 
void SetActivationEqn(TActivation *activation)
set activation equation
 
Double_t GetDelta() const
 
void AddPostLink(TSynapse *post)
add synapse as a post-link to this neuron
 
void SetInputCalculator(TNeuronInput *calculator)
set input calculator
 
Int_t NumPreLinks() const
 
void PrintActivationEqn()
print activation equation, for debugging
 
void CalculateValue()
calculate neuron input
 
void CalculateActivationValue()
calculate neuron activation/output
 
void PrintPostLinks() const
 
Int_t NumPostLinks() const
 
void AddPreLink(TSynapse *pre)
add synapse as a pre-link to this neuron
 
Double_t GetValue() const
 
void DeletePreLinks()
delete all pre-links
 
void PrintPreLinks() const
 
Synapse class used by TMVA artificial neural network methods.
 
void SetWeight(Double_t weight)
set synapse weight
 
void SetPostNeuron(TNeuron *post)
 
void SetPreNeuron(TNeuron *pre)
 
Int_t GetEntriesFast() const
 
Int_t GetEntries() const override
Return the number of objects in array (i.e.
 
TObject * At(Int_t idx) const override
 
void Add(TObject *obj) override
 
virtual Int_t Write(const char *name=nullptr, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
 
Random number generator class based on M.
 
Ssiz_t First(char c) const
Find first occurrence of a character c.
 
const char * Data() const
 
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
 
TString & Remove(Ssiz_t pos)
 
Bool_t AddRawLine(XMLNodePointer_t parent, const char *line)
Add just line into xml file Line should has correct xml syntax that later it can be decoded by xml pa...
 
XMLNodePointer_t NewChild(XMLNodePointer_t parent, XMLNsPointer_t ns, const char *name, const char *content=nullptr)
create new child element for parent node
 
XMLNodePointer_t GetChild(XMLNodePointer_t xmlnode, Bool_t realnode=kTRUE)
returns first child of xmlnode
 
XMLAttrPointer_t NewAttr(XMLNodePointer_t xmlnode, XMLNsPointer_t, const char *name, const char *value)
creates new attribute for xmlnode, namespaces are not supported for attributes
 
const char * GetNodeContent(XMLNodePointer_t xmlnode)
get contents (if any) of xmlnode
 
XMLNodePointer_t GetNext(XMLNodePointer_t xmlnode, Bool_t realnode=kTRUE)
return next to xmlnode node if realnode==kTRUE, any special nodes in between will be skipped
 
create variable transformations
 
MsgLogger & Endl(MsgLogger &ml)
 
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.