00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef LIBOUTPUTFUNCTIONS_H
00021 #define LIBOUTPUTFUNCTIONS_H
00022
00023 #include "types.h"
00024
00032 #include "outputfunction.h"
00033 #include "derivableoutputfunction.h"
00034
00035
00036 namespace nnfw {
00037
00048 class NNFW_API IdentityFunction : public DerivableOutputFunction {
00049 public:
00052
00054 IdentityFunction();
00055
00057 IdentityFunction( PropertySettings& prop );
00058
00060 virtual ~IdentityFunction() { };
00061
00063
00065
00067 virtual void apply( RealVec& inputs, RealVec& outputs );
00068
00070 virtual void derivate( const RealVec& x, const RealVec& y, RealVec& d ) const;
00071
00074 virtual IdentityFunction* clone() const;
00075
00077 };
00078
00090 class NNFW_API ScaleFunction : public OutputFunction {
00091 public:
00094
00096 ScaleFunction( Real rate = 1.0 );
00097
00099 ScaleFunction( PropertySettings& prop );
00100
00102 virtual ~ScaleFunction() { };
00103
00105
00107
00110 bool setRate( const Variant& v );
00111
00114 Variant getRate();
00115
00117 virtual void apply( RealVec& inputs, RealVec& outputs );
00118
00121 virtual ScaleFunction* clone() const;
00122
00124 private:
00125 Real rate;
00126 };
00127
00139 class NNFW_API GainFunction : public OutputFunction {
00140 public:
00143
00145 GainFunction( Real gain = 1.0 );
00146
00148 GainFunction( PropertySettings& prop );
00149
00151 virtual ~GainFunction() { };
00152
00154
00156
00158 bool setGain( const Variant& v );
00159
00161 Variant gain();
00162
00164 virtual void apply( RealVec& inputs, RealVec& outputs );
00165
00167 virtual GainFunction* clone() const;
00168
00170 private:
00171 Real gainv;
00172 };
00173
00185 class NNFW_API SigmoidFunction : public DerivableOutputFunction {
00186 public:
00189
00191 SigmoidFunction( Real l = 1.0 );
00192
00194 SigmoidFunction( PropertySettings& prop );
00195
00197 virtual ~SigmoidFunction() { };
00198
00200
00202
00205 bool setLambda( const Variant& v );
00206
00209 Variant getLambda();
00210
00213 virtual void apply( RealVec& inputs, RealVec& outputs );
00214
00216 virtual void derivate( const RealVec& x, const RealVec& y, RealVec& d ) const;
00217
00220 virtual SigmoidFunction* clone() const;
00221
00223 private:
00225 Real lambda;
00226 };
00227
00239 class NNFW_API FakeSigmoidFunction : public DerivableOutputFunction {
00240 public:
00243
00245 FakeSigmoidFunction( Real l = 1.0 );
00246
00248 FakeSigmoidFunction( PropertySettings& prop );
00249
00251 virtual ~FakeSigmoidFunction() { };
00252
00254
00256
00259 bool setLambda( const Variant& v );
00260
00263 Variant getLambda();
00264
00267 virtual void apply( RealVec& inputs, RealVec& outputs );
00268
00270 virtual void derivate( const RealVec& x, const RealVec& y, RealVec& d ) const;
00271
00274 virtual FakeSigmoidFunction* clone() const;
00275
00277
00279 Real lambda;
00280 };
00281
00298 class NNFW_API ScaledSigmoidFunction : public DerivableOutputFunction {
00299 public:
00302
00304 ScaledSigmoidFunction( Real l = 1.0, Real min = -1.0, Real max = +1.0 );
00305
00307 ScaledSigmoidFunction( PropertySettings& prop );
00308
00310 virtual ~ScaledSigmoidFunction() { };
00311
00313
00315
00318 bool setLambda( const Variant& v );
00319
00322 Variant getLambda();
00323
00326 bool setMin( const Variant& v );
00327
00330 Variant getMin();
00331
00334 bool setMax( const Variant& v );
00335
00338 Variant getMax();
00339
00342 virtual void apply( RealVec& inputs, RealVec& outputs );
00343
00345 virtual void derivate( const RealVec& x, const RealVec& y, RealVec& d ) const;
00346
00349 virtual ScaledSigmoidFunction* clone() const;
00350
00352
00354 Real lambda;
00356 Real min;
00358 Real max;
00359 };
00360
00386 class NNFW_API RampFunction : public DerivableOutputFunction {
00387 public:
00390
00392 RampFunction( Real minX, Real maxX, Real minY = -1, Real maxY = +1 );
00393
00395 RampFunction( PropertySettings& prop );
00396
00398 virtual ~RampFunction() { };
00399
00401
00403
00405 bool setMinX( const Variant& v );
00406
00408 Variant minX();
00409
00411 bool setMaxX( const Variant& v );
00412
00414 Variant maxX();
00415
00417 bool setMinY( const Variant& v );
00418
00420 Variant minY();
00421
00423 bool setMaxY( const Variant& v );
00424
00426 Variant maxY();
00427
00430 virtual void apply( RealVec& inputs, RealVec& outputs );
00431
00433 virtual void derivate( const RealVec& x, const RealVec& y, RealVec& d ) const;
00434
00436 virtual RampFunction* clone() const;
00437
00439
00441 Real min_x;
00443 Real max_x;
00445 Real min_y;
00447 Real max_y;
00448 };
00449
00465 class NNFW_API LinearFunction : public DerivableOutputFunction {
00466 public:
00469
00471 LinearFunction( Real m, Real b );
00472
00474 LinearFunction( PropertySettings& prop );
00475
00477 virtual ~LinearFunction() { };
00478
00480
00482
00484 bool setM( const Variant& v );
00485
00487 Variant m();
00488
00490 bool setB( const Variant& v );
00491
00493 Variant b();
00494
00496 virtual void apply( RealVec& inputs, RealVec& outputs );
00497
00499 virtual void derivate( const RealVec& x, const RealVec& y, RealVec& d ) const;
00500
00502 virtual LinearFunction* clone() const;
00503
00505
00507 Real mv;
00509 Real bv;
00510 };
00511
00525 class NNFW_API StepFunction : public DerivableOutputFunction {
00526 public:
00529
00531 StepFunction( Real min = 0.0f, Real max = 1.0f, Real threshold = 0.0f );
00532
00534 StepFunction( PropertySettings& prop );
00535
00537 virtual ~StepFunction() { };
00538
00540
00542
00545 bool setMin( const Variant& v );
00546
00549 Variant getMin();
00550
00553 bool setMax( const Variant& v );
00554
00557 Variant getMax();
00558
00561 bool setThreshold( const Variant& v );
00562
00565 Variant getThreshold();
00566
00569 virtual void apply( RealVec& inputs, RealVec& outputs );
00570
00572 virtual void derivate( const RealVec& x, const RealVec& y, RealVec& d ) const;
00573
00576 virtual StepFunction* clone() const;
00577
00579
00581 Real min;
00583 Real max;
00585 Real threshold;
00586 };
00587
00599 class NNFW_API LeakyIntegratorFunction : public OutputFunction {
00600 public:
00603
00605 LeakyIntegratorFunction( const RealVec& d );
00606
00608 LeakyIntegratorFunction( PropertySettings& prop );
00609
00611 virtual ~LeakyIntegratorFunction() { };
00612
00614
00616
00618 RealVec& getDelta() {
00619 return delta;
00620 };
00621
00623 void setDelta( const RealVec& v ) {
00624 delta.assign( v );
00625 };
00626
00628 Variant getDeltaV();
00629
00631 bool setDeltaV( const Variant& v );
00632
00634 void zeroingStatus();
00635
00639 virtual void apply( RealVec& inputs, RealVec& outputs );
00640
00642 virtual LeakyIntegratorFunction* clone() const;
00643
00645 virtual void setCluster( Cluster* );
00646
00648
00650 RealVec delta;
00652 RealVec outprev;
00653 };
00654
00670 class NNFW_API LogLikeFunction : public OutputFunction {
00671 public:
00674
00676 LogLikeFunction( Real A=1.0, Real B=5.0 );
00677
00679 LogLikeFunction( PropertySettings& prop );
00680
00682 virtual ~LogLikeFunction() { };
00683
00685
00687
00689 Real A() {
00690 return a;
00691 };
00692
00694 void setA( Real na ) {
00695 a = na;
00696 };
00697
00699 Variant getAV();
00700
00702 bool setAV( const Variant& v );
00703
00705 Real B() {
00706 return b;
00707 };
00708
00710 void setB( Real nb ) {
00711 b = nb;
00712 };
00713
00715 Variant getBV();
00716
00718 bool setBV( const Variant& v );
00719
00721 virtual void apply( RealVec& inputs, RealVec& outputs );
00722
00724 virtual LogLikeFunction* clone() const;
00725
00727
00728 private:
00730 Real a;
00732 Real b;
00733 };
00734
00749 class NNFW_API PoolFunction : public OutputFunction {
00750 public:
00753
00756 PoolFunction( const OutputFunction& prototype, u_int dim );
00757
00759 PoolFunction( PropertySettings& prop );
00760
00763 PoolFunction( u_int dim = 1 );
00764
00767 ~PoolFunction();
00768
00770
00772
00775 OutputFunction* getOutputFunction( u_int i );
00776
00779 void setOutputFunction( u_int i, const OutputFunction& prototype );
00780
00783 Variant getOutputFunctionV( u_int i );
00784
00787 bool setOutputFunction( u_int i, const Variant& prototype );
00788
00791 unsigned int size();
00792
00795 Variant sizeV();
00796
00800 virtual void apply( RealVec& inputs, RealVec& outputs );
00801
00804 virtual PoolFunction* clone() const;
00805
00808 virtual void setCluster( Cluster* );
00809
00811
00812 private:
00814 VectorData<OutputFunction*> ups;
00815 };
00816
00817
00818
00831 class NNFW_API CompositeFunction : public OutputFunction {
00832 public:
00835
00837 CompositeFunction( const OutputFunction& f, const OutputFunction& g );
00838
00840 CompositeFunction( PropertySettings& prop );
00841
00843 virtual ~CompositeFunction();
00844
00846
00848
00850 bool setFirstFunction( const Variant& v );
00851
00853 Variant getFirstFunction();
00854
00856 bool setSecondFunction( const Variant& v );
00857
00859 Variant getSecondFunction();
00860
00865 virtual void apply( RealVec& inputs, RealVec& outputs );
00866
00868 virtual CompositeFunction* clone() const;
00869
00871 virtual void setCluster( Cluster* );
00872
00874
00875
00876 OutputFunction* first;
00877 OutputFunction* second;
00878
00879 RealVec mid;
00880
00881 Cluster* cl;
00882 };
00883
00898 class NNFW_API LinearComboFunction : public OutputFunction {
00899 public:
00902
00904 LinearComboFunction( Real w1, const OutputFunction& f, Real w2, const OutputFunction& g );
00905
00907 LinearComboFunction( PropertySettings& prop );
00908
00910 virtual ~LinearComboFunction();
00911
00913
00915
00917 bool setFirstFunction( const Variant& v );
00919 Variant getFirstFunction();
00921 bool setFirstWeight( const Variant& v );
00923 Variant getFirstWeight();
00924
00926 bool setSecondFunction( const Variant& v );
00928 Variant getSecondFunction();
00930 bool setSecondWeight( const Variant& v );
00932 Variant getSecondWeight();
00933
00937 virtual void apply( RealVec& inputs, RealVec& outputs );
00938
00940 virtual LinearComboFunction* clone() const;
00942 virtual void setCluster( Cluster* );
00943
00945
00946
00947 OutputFunction* first;
00948 OutputFunction* second;
00949
00950 RealVec mid;
00951
00952 Real w1, w2;
00953
00954 Cluster* cl;
00955 };
00956
00957 }
00958
00959 #endif
00960
00961