nnfw/include/liboutputfunctions.h

Go to the documentation of this file.
00001 /********************************************************************************
00002  *  Neural Network Framework.                                                   *
00003  *  Copyright (C) 2005-2011 Gianluca Massera <emmegian@yahoo.it>                *
00004  *                                                                              *
00005  *  This program is free software; you can redistribute it and/or modify        *
00006  *  it under the terms of the GNU General Public License as published by        *
00007  *  the Free Software Foundation; either version 2 of the License, or           *
00008  *  (at your option) any later version.                                         *
00009  *                                                                              *
00010  *  This program is distributed in the hope that it will be useful,             *
00011  *  but WITHOUT ANY WARRANTY; without even the implied warranty of              *
00012  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               *
00013  *  GNU General Public License for more details.                                *
00014  *                                                                              *
00015  *  You should have received a copy of the GNU General Public License           *
00016  *  along with this program; if not, write to the Free Software                 *
00017  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  *
00018  ********************************************************************************/
00019 
00020 #ifndef LIBOUTPUTFUNCTIONS_H
00021 #define LIBOUTPUTFUNCTIONS_H
00022 
00023 #include "nnfwconfig.h"
00024 
00030 #include "outputfunction.h"
00031 #include <configurationparameters.h>
00032 #include <memory>
00033 
00034 namespace farsa {
00035 
00040 class FARSA_NNFW_API IdentityFunction : public OutputFunction {
00041 public:
00043     IdentityFunction();
00045     virtual ~IdentityFunction() { /* Nothing to do */ };
00047     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00049     virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
00060     virtual void configure(ConfigurationParameters& params, QString prefix);
00068     virtual void save(ConfigurationParameters& params, QString prefix);
00069 };
00070 
00075 class FARSA_NNFW_API ScaleFunction : public OutputFunction {
00076 public:
00078     ScaleFunction( double rate = 1.0 );
00080     virtual ~ScaleFunction() { /* Nothing to do */ };
00082     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00084     virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
00095     virtual void configure(ConfigurationParameters& params, QString prefix);
00103     virtual void save(ConfigurationParameters& params, QString prefix);
00104     double rate;
00105 };
00106 
00111 class FARSA_NNFW_API GainFunction : public OutputFunction {
00112 public:
00114     GainFunction( double gain = 1.0 );
00116     virtual ~GainFunction() { /* Nothing to do */ };
00118     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00120     virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
00131     virtual void configure(ConfigurationParameters& params, QString prefix);
00139     virtual void save(ConfigurationParameters& params, QString prefix);
00140     double gainv;
00141 };
00142 
00147 class FARSA_NNFW_API SigmoidFunction : public OutputFunction {
00148 public:
00150     SigmoidFunction( double l = 1.0 );
00152     virtual ~SigmoidFunction() { /* Nothing to do */ };
00154     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00156     virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
00167     virtual void configure(ConfigurationParameters& params, QString prefix);
00175     virtual void save(ConfigurationParameters& params, QString prefix);
00177     double lambda;
00178 };
00179 
00183 class FARSA_NNFW_API FakeSigmoidFunction : public OutputFunction {
00184 public:
00186     FakeSigmoidFunction( double l = 1.0 );
00188     virtual ~FakeSigmoidFunction() { /* Nothing to do */ };
00190     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00192     virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
00203     virtual void configure(ConfigurationParameters& params, QString prefix);
00211     virtual void save(ConfigurationParameters& params, QString prefix);
00213     double lambda;
00214 };
00215 
00224 class FARSA_NNFW_API ScaledSigmoidFunction : public OutputFunction {
00225 public:
00227     ScaledSigmoidFunction( double l = 1.0, double min = -1.0, double max = +1.0 );
00229     virtual ~ScaledSigmoidFunction() { /* Nothing to do */ };
00231     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00233     virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
00244     virtual void configure(ConfigurationParameters& params, QString prefix);
00252     virtual void save(ConfigurationParameters& params, QString prefix);
00254     double lambda;
00256     double min;
00258     double max;
00259 };
00260 
00277 class FARSA_NNFW_API RampFunction : public OutputFunction {
00278 public:
00280     RampFunction();
00282     RampFunction( double minX, double maxX, double minY = -1, double maxY = +1 );
00284     virtual ~RampFunction() { /* Nothing to do */ };
00286     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00288     virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
00299     virtual void configure(ConfigurationParameters& params, QString prefix);
00307     virtual void save(ConfigurationParameters& params, QString prefix);
00309     double min_x;
00311     double max_x;
00313     double min_y;
00315     double max_y;
00316 };
00317 
00324 class FARSA_NNFW_API LinearFunction : public OutputFunction {
00325 public:
00327     LinearFunction();
00329     LinearFunction( double m, double b );
00331     virtual ~LinearFunction() { /* Nothing to do */ };
00333     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00335     virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
00346     virtual void configure(ConfigurationParameters& params, QString prefix);
00354     virtual void save(ConfigurationParameters& params, QString prefix);
00356     double m;
00358     double b;
00359 };
00360 
00366 class FARSA_NNFW_API StepFunction : public OutputFunction {
00367 public:
00369     StepFunction( double min = 0.0f, double max = 1.0f, double threshold = 0.0f );
00371     virtual ~StepFunction() { /* Nothing to do */ };
00373     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00375     virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
00386     virtual void configure(ConfigurationParameters& params, QString prefix);
00394     virtual void save(ConfigurationParameters& params, QString prefix);
00396     double min;
00398     double max;
00400     double threshold;
00401 };
00402 
00406 class FARSA_NNFW_API LeakyIntegratorFunction : public OutputFunction {
00407 public:
00409     LeakyIntegratorFunction();
00411     LeakyIntegratorFunction( const DoubleVector& deltas );
00413     virtual ~LeakyIntegratorFunction() { /* Nothing to do */ };
00415     void zeroingStatus();
00419     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00421     virtual void clusterSetted();
00432     virtual void configure(ConfigurationParameters& params, QString prefix);
00440     virtual void save(ConfigurationParameters& params, QString prefix);
00442     DoubleVector delta;
00444     DoubleVector outprev;
00445 };
00446 
00455 class FARSA_NNFW_API LogLikeFunction : public OutputFunction {
00456 public:
00458     LogLikeFunction( double A=1.0, double B=5.0 );
00460     virtual ~LogLikeFunction() { /* Nothing to do */ };
00462     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00473     virtual void configure(ConfigurationParameters& params, QString prefix);
00481     virtual void save(ConfigurationParameters& params, QString prefix);
00483     double A;
00485     double B;
00486 };
00487 
00493 class FARSA_NNFW_API CompositeFunction : public OutputFunction {
00494 public:
00496     CompositeFunction();
00498     CompositeFunction( OutputFunction *f, OutputFunction *g );
00500     virtual ~CompositeFunction();
00502     bool setFirstFunction( OutputFunction *f );
00504     OutputFunction* getFirstFunction();
00506     bool setSecondFunction( OutputFunction *g );
00508     OutputFunction* getSecondFunction();
00513     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00515     virtual void clusterSetted();
00526     virtual void configure(ConfigurationParameters& params, QString prefix);
00534     virtual void save(ConfigurationParameters& params, QString prefix);
00535 private:
00537     std::auto_ptr<OutputFunction> first;
00539     std::auto_ptr<OutputFunction> second;
00541     DoubleVector mid;
00543     CompositeFunction(const CompositeFunction&);
00544     CompositeFunction& operator=(const CompositeFunction&);
00545 };
00546 
00553 class FARSA_NNFW_API LinearComboFunction : public OutputFunction {
00554 public:
00556     LinearComboFunction();
00558     LinearComboFunction( double w1, OutputFunction *f, double w2, OutputFunction *g );
00560     virtual ~LinearComboFunction();
00562     bool setFirstFunction( OutputFunction *f );
00564     OutputFunction* getFirstFunction();
00566     bool setFirstWeight( double v );
00568     double getFirstWeight();
00570     bool setSecondFunction( OutputFunction *g );
00572     OutputFunction* getSecondFunction();
00574     bool setSecondWeight( double v );
00576     double getSecondWeight();
00580     virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
00582     virtual void clusterSetted();
00593     virtual void configure(ConfigurationParameters& params, QString prefix);
00601     virtual void save(ConfigurationParameters& params, QString prefix);
00602 private:
00603     //--- functions
00604     std::auto_ptr<OutputFunction> first;
00605     std::auto_ptr<OutputFunction> second;
00606     //--- temporary result
00607     DoubleVector mid;
00608     //--- weights
00609     double w1, w2;
00610     // Copy constructor and copy operator (here to prevent usage)
00611     LinearComboFunction(const LinearComboFunction&);
00612     LinearComboFunction& operator=(const LinearComboFunction&);
00613 };
00614 
00615 }
00616 
00617 #endif