PLearn 0.1
Public Member Functions | Static Public Member Functions | Public Attributes | Static Public Attributes | Static Protected Member Functions | Private Types | Private Member Functions
PLearn::SurfaceTemplateLearner Class Reference

The first sentence should be a BRIEF DESCRIPTION of what the class does. More...

#include <SurfaceTemplateLearner.h>

Inheritance diagram for PLearn::SurfaceTemplateLearner:
Inheritance graph
[legend]
Collaboration diagram for PLearn::SurfaceTemplateLearner:
Collaboration graph
[legend]

List of all members.

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 OptionListgetOptionList () const
virtual OptionMapgetOptionMap () const
virtual RemoteMethodMapgetRemoteMethodMap () const
virtual SurfaceTemplateLearnerdeepCopy (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 PPathdeclaringFile ()

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.

Detailed Description

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

Todo:
Write class to-do's here if there are any.
Deprecated:
Write deprecated stuff here if there is any. Indicate what else should be used instead.

Definition at line 58 of file SurfaceTemplateLearner.h.


Member Typedef Documentation

Reimplemented from PLearn::NNet.

Definition at line 60 of file SurfaceTemplateLearner.h.


Constructor & Destructor Documentation

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;
}

Member Function Documentation

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.

bool PLearn::SurfaceTemplateLearner::_isa_ ( const Object o) [static]

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_();
}

Here is the call graph for this function:

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;
    }
}

Here is the call graph for this function:

Here is the caller graph for this function:

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).");

}

Here is the call graph for this function:

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!");
}

Here is the call graph for this function:

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);
}

Here is the call graph for this function:

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);
}

Here is the call graph for this function:

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();
}

Here is the call graph for this function:


Member Data Documentation

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().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines