| 
    PLearn 0.1 
   | 
 
The first sentence should be a BRIEF DESCRIPTION of what the class does. More...
#include <SurfaceTemplateLearner.h>


Public Member Functions | |
| SurfaceTemplateLearner () | |
| Default constructor.   | |
| virtual void | train () | 
| (Re-)initializes the PLearner in its fresh state (that state may depend on the 'seed' option) and sets 'stage' back to 0 (this is the stage of a fresh learner!).   | |
| virtual void | setTrainingSet (VMat training_set, bool call_forget=true) | 
| Computes the output from the input.   | |
| virtual void | test (VMat testset, PP< VecStatsCollector > test_stats, VMat testoutputs=0, VMat testcosts=0) const | 
| Overridden in order to properly obtain the fieldnames.   | |
| virtual string | classname () const | 
| virtual OptionList & | getOptionList () const | 
| virtual OptionMap & | getOptionMap () const | 
| virtual RemoteMethodMap & | getRemoteMethodMap () const | 
| virtual SurfaceTemplateLearner * | deepCopy (CopiesMap &copies) const | 
| virtual void | build () | 
| Finish building the object; just call inherited::build followed by build_()   | |
| virtual void | makeDeepCopyFromShallowCopy (CopiesMap &copies) | 
| Transforms a shallow copy into a deep copy.   | |
Static Public Member Functions | |
| static string | _classname_ () | 
| static OptionList & | _getOptionList_ () | 
| static RemoteMethodMap & | _getRemoteMethodMap_ () | 
| static Object * | _new_instance_for_typemap_ () | 
| static bool | _isa_ (const Object *o) | 
| static void | _static_initialize_ () | 
| static const PPath & | declaringFile () | 
Public Attributes | |
| real | min_feature_dev | 
| real | min_geom_dev | 
| bool | simple_mixture | 
| VMat | templates_source | 
Static Public Attributes | |
| static StaticInitializer | _static_initializer_ | 
Static Protected Member Functions | |
| static void | declareOptions (OptionList &ol) | 
| Declares the class options.   | |
Private Types | |
| typedef NNet | inherited | 
Private Member Functions | |
| void | build_ () | 
| This does the actual building.   | |
The first sentence should be a BRIEF DESCRIPTION of what the class does.
Place the rest of the class programmer documentation here. Doxygen supports Javadoc-style comments. See http://www.doxygen.org/manual.html
Definition at line 58 of file SurfaceTemplateLearner.h.
typedef NNet PLearn::SurfaceTemplateLearner::inherited [private] | 
        
Reimplemented from PLearn::NNet.
Definition at line 60 of file SurfaceTemplateLearner.h.
| PLearn::SurfaceTemplateLearner::SurfaceTemplateLearner | ( | ) | 
Default constructor.
Definition at line 55 of file SurfaceTemplateLearner.cc.
References PLearn::NNet::cost_funcs, PLearn::NNet::n_non_params_in_first_hidden_layer, PLearn::NNet::nhidden, PLearn::NNet::nhidden2, PLearn::NNet::noutputs, PLearn::NNet::output_transfer_func, and PLearn::NNet::transpose_first_hidden_layer.
                                              :
    min_feature_dev(1e-3),
    min_geom_dev(1e-3),
    simple_mixture(false)
{
    nhidden2 = 10;
    // Set some NNet options whose value is fixed in this learner.
    nhidden = 0;
    noutputs = 1;
    output_transfer_func = "sigmoid";
    cost_funcs = TVec<string>(1, "stable_cross_entropy");
    transpose_first_hidden_layer = false;
    n_non_params_in_first_hidden_layer = 1;
}
| string PLearn::SurfaceTemplateLearner::_classname_ | ( | ) |  [static] | 
        
Reimplemented from PLearn::NNet.
Definition at line 50 of file SurfaceTemplateLearner.cc.
| OptionList & PLearn::SurfaceTemplateLearner::_getOptionList_ | ( | ) |  [static] | 
        
Reimplemented from PLearn::NNet.
Definition at line 50 of file SurfaceTemplateLearner.cc.
| RemoteMethodMap & PLearn::SurfaceTemplateLearner::_getRemoteMethodMap_ | ( | ) |  [static] | 
        
Reimplemented from PLearn::NNet.
Definition at line 50 of file SurfaceTemplateLearner.cc.
Reimplemented from PLearn::NNet.
Definition at line 50 of file SurfaceTemplateLearner.cc.
| Object * PLearn::SurfaceTemplateLearner::_new_instance_for_typemap_ | ( | ) |  [static] | 
        
Reimplemented from PLearn::NNet.
Definition at line 50 of file SurfaceTemplateLearner.cc.
| StaticInitializer SurfaceTemplateLearner::_static_initializer_ & PLearn::SurfaceTemplateLearner::_static_initialize_ | ( | ) |  [static] | 
        
Reimplemented from PLearn::NNet.
Definition at line 50 of file SurfaceTemplateLearner.cc.
| void PLearn::SurfaceTemplateLearner::build | ( | ) |  [virtual] | 
        
Finish building the object; just call inherited::build followed by build_()
Reimplemented from PLearn::NNet.
Definition at line 280 of file SurfaceTemplateLearner.cc.
References PLearn::NNet::build(), build_(), PLearn::NNet::first_hidden_layer_is_output, PLearn::NNet::output_transfer_func, simple_mixture, templates_source, and PLearn::PLearner::train_set.
{
    // Very ugly hack: because NNet::build_() will perform a fprop(), we need a
    // sensible input value for this fprop, which means we need a training set.
    // A simple way to fix this would be to remove the
    // output_and_target_to_cost->recomputeParents() in the NNet build, but one
    // should make sure it does not break anything first.
    if (!train_set && templates_source)
        this->train_set = templates_source;
    // Because the overall network is built in the NNet build, the simple
    // mixture case must be handled before calling it.
    first_hidden_layer_is_output = simple_mixture;
    // Since we are already hacking this method, we may continue doing so:
    // depending on the value of 'simple_mixture' (true or false), the output
    // transfer function should be either nothing or a sigmoid.
    output_transfer_func = simple_mixture ? "none" : "sigmoid";
    inherited::build();
    build_();
}

| void PLearn::SurfaceTemplateLearner::build_ | ( | ) |  [private] | 
        
This does the actual building.
Reimplemented from PLearn::NNet.
Definition at line 252 of file SurfaceTemplateLearner.cc.
References PLearn::NNet::first_hidden_layer, i, PLearn::TVec< T >::length(), min_feature_dev, min_geom_dev, PLERROR, and simple_mixture.
Referenced by build().
{
    // Ensure the first hidden layer is a subclass of ScoreLayerVariable.
    if (first_hidden_layer) {
        PP<ScoreLayerVariable> score_layer =
            (ScoreLayerVariable*) ((Variable*) first_hidden_layer);
        if (!score_layer)
            PLERROR("In SurfaceTemplateLearner::build_ - The first hidden "
                    "layer, as given by the 'score_layer' option, must be a "
                    "subclass of ScoreLayerVariable");
        // Set the minimum value for template standard deviations.
        if (score_layer->run_icp_var) {
            TVec< PP<ChemicalICP> > icp_aligners =
                score_layer->run_icp_var->icp_aligners;
            for (int i = 0; i < icp_aligners.length(); i++) {
                icp_aligners[i]->all_template_feat_dev->
                    setMinValue(min_feature_dev);
                icp_aligners[i]->template_geom_dev->setMinValue(min_geom_dev);
            }
        }
        // Set value of 'simple_mixture' option.
        score_layer->simple_mixture = this->simple_mixture;
    }
}


| string PLearn::SurfaceTemplateLearner::classname | ( | ) |  const [virtual] | 
        
Reimplemented from PLearn::NNet.
Definition at line 50 of file SurfaceTemplateLearner.cc.
| void PLearn::SurfaceTemplateLearner::declareOptions | ( | OptionList & | ol | ) |  [static, protected] | 
        
Declares the class options.
Reimplemented from PLearn::NNet.
Definition at line 73 of file SurfaceTemplateLearner.cc.
References PLearn::NNet::bias_decay, PLearn::OptionBase::buildoption, PLearn::declareOption(), PLearn::NNet::declareOptions(), PLearn::NNet::direct_in_to_out, PLearn::NNet::direct_in_to_out_weight_decay, PLearn::NNet::do_not_change_params, PLearn::NNet::first_class_is_junk, PLearn::NNet::first_hidden_layer, PLearn::NNet::fixed_output_weights, PLearn::PLearner::forget_when_training_set_changes, PLearn::NNet::hidden_transfer_func, PLearn::NNet::initialization_method, PLearn::NNet::input_reconstruction_penalty, PLearn::NNet::L1_penalty, PLearn::NNet::layer1_bias_decay, PLearn::NNet::layer1_weight_decay, PLearn::NNet::layer2_bias_decay, PLearn::NNet::layer2_weight_decay, PLearn::NNet::margin, min_feature_dev, min_geom_dev, PLearn::NNet::n_non_params_in_first_hidden_layer, PLearn::NNet::nhidden2, PLearn::OptionBase::nosave, PLearn::NNet::noutputs, PLearn::PLearner::nservers, PLearn::NNet::output_layer_bias_decay, PLearn::NNet::output_layer_weight_decay, PLearn::NNet::output_transfer_func, PLearn::NNet::rbf_layer_size, PLearn::redeclareOption(), PLearn::PLearner::save_trainingset_prefix, simple_mixture, templates_source, and PLearn::NNet::transpose_first_hidden_layer.
{
    declareOption(ol, "min_feature_dev",
                  &SurfaceTemplateLearner::min_feature_dev,
                  OptionBase::buildoption,
        "Minimum feature standard deviations allowed.");
    declareOption(ol, "min_geom_dev",
                  &SurfaceTemplateLearner::min_geom_dev,
                  OptionBase::buildoption,
        "Minimum geometric standard deviations allowed.");
    // We rename 'first_hidden_layer' into 'score_layer' to avoid potential
    // confusion.
    declareOption(ol, "score_layer",
                  &SurfaceTemplateLearner::first_hidden_layer,
                  OptionBase::buildoption,
        "The layer of scores (should be a ScoreLayerVariable).");
    declareOption(ol, "simple_mixture",
                  &SurfaceTemplateLearner::simple_mixture,
                  OptionBase::buildoption,
        "If true, then instead of building another hidden layer on top of\n"
        "alignment scores, we use them directly in a mixture of Gaussians\n"
        "fashion to estimate the probability of being active.");
    declareOption(ol, "templates_source",
                  &SurfaceTemplateLearner::templates_source,
                  OptionBase::buildoption,
        "The dataset where templates are taken from. If not provided, the\n"
        "training set will be used instead.");
    // Now call the parent class' declareOptions
    inherited::declareOptions(ol);
    // Redeclare parent's option to make this learner more user-friendly.
    // 'nhidden' now modifies the 'nhidden2' parameter in NNet, since a
    // SurfaceTemplateLearner has always a first hidden layer that is a
    // ScoreLayerVariable.
    redeclareOption(ol, "nhidden", &SurfaceTemplateLearner::nhidden2,
                                   OptionBase::buildoption,
        "Number of hidden units.");
    redeclareOption(ol, "nhidden2", &SurfaceTemplateLearner::nhidden2,
                                    OptionBase::nosave,
        "Not used (see nhidden).");
    redeclareOption(ol, "noutputs", &SurfaceTemplateLearner::noutputs,
                                    OptionBase::nosave,
        "Not used (= 1).");
    redeclareOption(ol, "bias_decay", &SurfaceTemplateLearner::bias_decay,
                                      OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "layer1_weight_decay",
                    &SurfaceTemplateLearner::layer1_weight_decay,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "layer1_bias_decay",
                    &SurfaceTemplateLearner::layer1_bias_decay,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "layer2_weight_decay",
                    &SurfaceTemplateLearner::layer2_weight_decay,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "layer2_bias_decay",
                    &SurfaceTemplateLearner::layer2_bias_decay,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "output_layer_weight_decay",
                    &SurfaceTemplateLearner::output_layer_weight_decay,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "output_layer_bias_decay",
                    &SurfaceTemplateLearner::output_layer_bias_decay,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "direct_in_to_out_weight_decay",
                    &SurfaceTemplateLearner::direct_in_to_out_weight_decay,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "L1_penalty", &SurfaceTemplateLearner::L1_penalty,
                                      OptionBase::nosave,
        "Not used (deprecated).");
    redeclareOption(ol, "fixed_output_weights",
                    &SurfaceTemplateLearner::fixed_output_weights,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "input_reconstruction_penalty",
                    &SurfaceTemplateLearner::input_reconstruction_penalty,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "direct_in_to_out",
                    &SurfaceTemplateLearner::direct_in_to_out,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "rbf_layer_size",
                    &SurfaceTemplateLearner::rbf_layer_size,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "first_class_is_junk",
                    &SurfaceTemplateLearner::first_class_is_junk,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "output_transfer_func",
                    &SurfaceTemplateLearner::output_transfer_func,
                    OptionBase::nosave,
        "Not used (= sigmoid or none, depending on 'simple_mixture').");
    redeclareOption(ol, "hidden_transfer_func",
                    &SurfaceTemplateLearner::hidden_transfer_func,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "first_hidden_layer",
                    &SurfaceTemplateLearner::first_hidden_layer,
                    OptionBase::nosave,
        "Not used (renamed to 'score_layer').");
    redeclareOption(ol, "transpose_first_hidden_layer",
                    &SurfaceTemplateLearner::transpose_first_hidden_layer,
                    OptionBase::nosave,
        "Not used (= false).");
    redeclareOption(ol, "n_non_params_in_first_hidden_layer",
                   &SurfaceTemplateLearner::n_non_params_in_first_hidden_layer,
                   OptionBase::nosave,
        "Not used (= 1 because of the 'final_output' variable in the\n"
        "ScoreLayerVariable).");
    redeclareOption(ol, "margin", &SurfaceTemplateLearner::margin,
                                  OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "do_not_change_params",
                    &SurfaceTemplateLearner::do_not_change_params,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "initialization_method",
                    &SurfaceTemplateLearner::initialization_method,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "forget_when_training_set_changes",
                    &SurfaceTemplateLearner::forget_when_training_set_changes,
                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "nservers", &SurfaceTemplateLearner::nservers,
                                    OptionBase::nosave,
        "Not used (simplification).");
    redeclareOption(ol, "save_trainingset_prefix",
                    &SurfaceTemplateLearner::save_trainingset_prefix,
                    OptionBase::nosave,
        "Not used (simplification).");
}

| static const PPath& PLearn::SurfaceTemplateLearner::declaringFile | ( | ) |  [inline, static] | 
        
Reimplemented from PLearn::NNet.
Definition at line 121 of file SurfaceTemplateLearner.h.
:
    //#####  Protected Member Functions  ######################################
| SurfaceTemplateLearner * PLearn::SurfaceTemplateLearner::deepCopy | ( | CopiesMap & | copies | ) |  const [virtual] | 
        
Reimplemented from PLearn::NNet.
Definition at line 50 of file SurfaceTemplateLearner.cc.
| OptionList & PLearn::SurfaceTemplateLearner::getOptionList | ( | ) |  const [virtual] | 
        
Reimplemented from PLearn::NNet.
Definition at line 50 of file SurfaceTemplateLearner.cc.
| OptionMap & PLearn::SurfaceTemplateLearner::getOptionMap | ( | ) |  const [virtual] | 
        
Reimplemented from PLearn::NNet.
Definition at line 50 of file SurfaceTemplateLearner.cc.
| RemoteMethodMap & PLearn::SurfaceTemplateLearner::getRemoteMethodMap | ( | ) |  const [virtual] | 
        
Reimplemented from PLearn::NNet.
Definition at line 50 of file SurfaceTemplateLearner.cc.
| void PLearn::SurfaceTemplateLearner::makeDeepCopyFromShallowCopy | ( | CopiesMap & | copies | ) |  [virtual] | 
        
Transforms a shallow copy into a deep copy.
Reimplemented from PLearn::NNet.
Definition at line 306 of file SurfaceTemplateLearner.cc.
References PLearn::deepCopyField(), PLearn::NNet::makeDeepCopyFromShallowCopy(), and templates_source.
{
    inherited::makeDeepCopyFromShallowCopy(copies);
    // ### Call deepCopyField on all "pointer-like" fields
    // ### that you wish to be deepCopied rather than
    // ### shallow-copied.
    // ### ex:
    // deepCopyField(trainvec, copies);
    deepCopyField(templates_source, copies);
    // ### Remove this line when you have fully implemented this method.
    // PLERROR("SurfaceTemplateLearner::makeDeepCopyFromShallowCopy not fully (correctly) implemented yet!");
}

| void PLearn::SurfaceTemplateLearner::setTrainingSet | ( | VMat | training_set, | 
| bool | call_forget = true  | 
        ||
| ) |  [virtual] | 
        
Computes the output from the input.
Computes the costs from already computed output. Overridden in order to properly obtain the fieldnames.
Reimplemented from PLearn::NNet.
Definition at line 324 of file SurfaceTemplateLearner.cc.
References PLearn::NNet::first_hidden_layer, PLearn::NNet::setTrainingSet(), and templates_source.
{
    // Rebuild the internal score layer.
    PP<ScoreLayerVariable> score_layer =
        (ScoreLayerVariable*) ((Variable*) first_hidden_layer);
    score_layer->templates_source =
        this->templates_source ? this->templates_source : training_set;
    score_layer->setMappingsSource(training_set);
    score_layer->build();
    inherited::setTrainingSet(training_set, call_forget);
}

| void PLearn::SurfaceTemplateLearner::test | ( | VMat | testset, | 
| PP< VecStatsCollector > | test_stats, | ||
| VMat | testoutputs = 0,  | 
        ||
| VMat | testcosts = 0  | 
        ||
| ) |  const [virtual] | 
        
Overridden in order to properly obtain the fieldnames.
Reimplemented from PLearn::PLearner.
Definition at line 341 of file SurfaceTemplateLearner.cc.
References PLearn::NNet::first_hidden_layer, and PLearn::PLearner::test().
{
    PP<ScoreLayerVariable> score_layer =
        (ScoreLayerVariable*) ((Variable*) first_hidden_layer);
    score_layer->setMappingsSource(testset);
    inherited::test(testset, test_stats, testoutputs, testcosts);
}

| void PLearn::SurfaceTemplateLearner::train | ( | ) |  [virtual] | 
        
(Re-)initializes the PLearner in its fresh state (that state may depend on the 'seed' option) and sets 'stage' back to 0 (this is the stage of a fresh learner!).
Overridden to ensure the mappings source in the score layer is properly set.
Reimplemented from PLearn::NNet.
Definition at line 361 of file SurfaceTemplateLearner.cc.
References PLearn::NNet::first_hidden_layer, i, PLearn::TVec< T >::length(), PLearn::PLearner::stage, PLearn::NNet::train(), and PLearn::PLearner::train_set.
{
    PP<ScoreLayerVariable> score_layer =
        (ScoreLayerVariable*) ((Variable*) first_hidden_layer);
    score_layer->setMappingsSource(train_set);
    if (stage == 0) {
        // Make sure all ICP aligners forget any previously computed alignment.
        // This can be important when they use some memory scheme, since at
        // build time a first alignment might be performed, and should probably
        // be forgotten.
        TVec< PP<ChemicalICP> > icps = score_layer->run_icp_var->icp_aligners;
        for (int i = 0; i < icps.length();  i++)
            icps[i]->forgetMemorizedAlignments();
    }
    inherited::train();
}

Reimplemented from PLearn::NNet.
Definition at line 121 of file SurfaceTemplateLearner.h.
Definition at line 65 of file SurfaceTemplateLearner.h.
Referenced by build_(), and declareOptions().
Definition at line 66 of file SurfaceTemplateLearner.h.
Referenced by build_(), and declareOptions().
Definition at line 68 of file SurfaceTemplateLearner.h.
Referenced by build(), build_(), and declareOptions().
Definition at line 70 of file SurfaceTemplateLearner.h.
Referenced by build(), declareOptions(), makeDeepCopyFromShallowCopy(), and setTrainingSet().
 1.7.4