liboutputfunctions.h
Go to the documentation of this file.
1 /********************************************************************************
2  * Neural Network Framework. *
3  * Copyright (C) 2005-2011 Gianluca Massera <emmegian@yahoo.it> *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the Free Software *
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
18  ********************************************************************************/
19 
20 #ifndef LIBOUTPUTFUNCTIONS_H
21 #define LIBOUTPUTFUNCTIONS_H
22 
23 #include "nnfwconfig.h"
24 
30 #include "outputfunction.h"
31 #include <configurationparameters.h>
32 #include <memory>
33 
34 namespace farsa {
35 
40 class FARSA_NNFW_API IdentityFunction : public OutputFunction {
41 public:
45  virtual ~IdentityFunction() { /* Nothing to do */ };
47  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
49  virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
60  virtual void configure(ConfigurationParameters& params, QString prefix);
68  virtual void save(ConfigurationParameters& params, QString prefix);
69 };
70 
75 class FARSA_NNFW_API ScaleFunction : public OutputFunction {
76 public:
78  ScaleFunction( double rate = 1.0 );
80  virtual ~ScaleFunction() { /* Nothing to do */ };
82  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
84  virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
95  virtual void configure(ConfigurationParameters& params, QString prefix);
103  virtual void save(ConfigurationParameters& params, QString prefix);
104  double rate;
105 };
106 
111 class FARSA_NNFW_API GainFunction : public OutputFunction {
112 public:
114  GainFunction( double gain = 1.0 );
116  virtual ~GainFunction() { /* Nothing to do */ };
118  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
120  virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
131  virtual void configure(ConfigurationParameters& params, QString prefix);
139  virtual void save(ConfigurationParameters& params, QString prefix);
140  double gainv;
141 };
142 
147 class FARSA_NNFW_API SigmoidFunction : public OutputFunction {
148 public:
150  SigmoidFunction( double l = 1.0 );
152  virtual ~SigmoidFunction() { /* Nothing to do */ };
154  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
156  virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
167  virtual void configure(ConfigurationParameters& params, QString prefix);
175  virtual void save(ConfigurationParameters& params, QString prefix);
177  double lambda;
178 };
179 
183 class FARSA_NNFW_API FakeSigmoidFunction : public OutputFunction {
184 public:
186  FakeSigmoidFunction( double l = 1.0 );
188  virtual ~FakeSigmoidFunction() { /* Nothing to do */ };
190  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
192  virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
203  virtual void configure(ConfigurationParameters& params, QString prefix);
211  virtual void save(ConfigurationParameters& params, QString prefix);
213  double lambda;
214 };
215 
224 class FARSA_NNFW_API ScaledSigmoidFunction : public OutputFunction {
225 public:
227  ScaledSigmoidFunction( double l = 1.0, double min = -1.0, double max = +1.0 );
229  virtual ~ScaledSigmoidFunction() { /* Nothing to do */ };
231  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
233  virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
244  virtual void configure(ConfigurationParameters& params, QString prefix);
252  virtual void save(ConfigurationParameters& params, QString prefix);
254  double lambda;
256  double min;
258  double max;
259 };
260 
277 class FARSA_NNFW_API RampFunction : public OutputFunction {
278 public:
280  RampFunction();
282  RampFunction( double minX, double maxX, double minY = -1, double maxY = +1 );
284  virtual ~RampFunction() { /* Nothing to do */ };
286  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
288  virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
299  virtual void configure(ConfigurationParameters& params, QString prefix);
307  virtual void save(ConfigurationParameters& params, QString prefix);
309  double min_x;
311  double max_x;
313  double min_y;
315  double max_y;
316 };
317 
324 class FARSA_NNFW_API LinearFunction : public OutputFunction {
325 public:
327  LinearFunction();
329  LinearFunction( double m, double b );
331  virtual ~LinearFunction() { /* Nothing to do */ };
333  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
335  virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
346  virtual void configure(ConfigurationParameters& params, QString prefix);
354  virtual void save(ConfigurationParameters& params, QString prefix);
356  double m;
358  double b;
359 };
360 
366 class FARSA_NNFW_API StepFunction : public OutputFunction {
367 public:
369  StepFunction( double min = 0.0f, double max = 1.0f, double threshold = 0.0f );
371  virtual ~StepFunction() { /* Nothing to do */ };
373  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
375  virtual bool derivate( const DoubleVector& x, const DoubleVector& y, DoubleVector& d ) const;
386  virtual void configure(ConfigurationParameters& params, QString prefix);
394  virtual void save(ConfigurationParameters& params, QString prefix);
396  double min;
398  double max;
400  double threshold;
401 };
402 
406 class FARSA_NNFW_API LeakyIntegratorFunction : public OutputFunction {
407 public:
411  LeakyIntegratorFunction( const DoubleVector& deltas );
413  virtual ~LeakyIntegratorFunction() { /* Nothing to do */ };
415  void zeroingStatus();
419  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
421  virtual void clusterSetted();
432  virtual void configure(ConfigurationParameters& params, QString prefix);
440  virtual void save(ConfigurationParameters& params, QString prefix);
445 };
446 
455 class FARSA_NNFW_API LogLikeFunction : public OutputFunction {
456 public:
458  LogLikeFunction( double A=1.0, double B=5.0 );
460  virtual ~LogLikeFunction() { /* Nothing to do */ };
462  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
473  virtual void configure(ConfigurationParameters& params, QString prefix);
481  virtual void save(ConfigurationParameters& params, QString prefix);
483  double A;
485  double B;
486 };
487 
493 class FARSA_NNFW_API CompositeFunction : public OutputFunction {
494 public:
500  virtual ~CompositeFunction();
502  bool setFirstFunction( OutputFunction *f );
504  OutputFunction* getFirstFunction();
506  bool setSecondFunction( OutputFunction *g );
508  OutputFunction* getSecondFunction();
513  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
515  virtual void clusterSetted();
526  virtual void configure(ConfigurationParameters& params, QString prefix);
534  virtual void save(ConfigurationParameters& params, QString prefix);
535 private:
537  std::auto_ptr<OutputFunction> first;
539  std::auto_ptr<OutputFunction> second;
541  DoubleVector mid;
544  CompositeFunction& operator=(const CompositeFunction&);
545 };
546 
553 class FARSA_NNFW_API LinearComboFunction : public OutputFunction {
554 public:
558  LinearComboFunction( double w1, OutputFunction *f, double w2, OutputFunction *g );
560  virtual ~LinearComboFunction();
562  bool setFirstFunction( OutputFunction *f );
564  OutputFunction* getFirstFunction();
566  bool setFirstWeight( double v );
568  double getFirstWeight();
570  bool setSecondFunction( OutputFunction *g );
572  OutputFunction* getSecondFunction();
574  bool setSecondWeight( double v );
576  double getSecondWeight();
580  virtual void apply( DoubleVector& inputs, DoubleVector& outputs );
582  virtual void clusterSetted();
593  virtual void configure(ConfigurationParameters& params, QString prefix);
601  virtual void save(ConfigurationParameters& params, QString prefix);
602 private:
603  //--- functions
604  std::auto_ptr<OutputFunction> first;
605  std::auto_ptr<OutputFunction> second;
606  //--- temporary result
607  DoubleVector mid;
608  //--- weights
609  double w1, w2;
610  // Copy constructor and copy operator (here to prevent usage)
612  LinearComboFunction& operator=(const LinearComboFunction&);
613 };
614 
615 }
616 
617 #endif