feedforwardnn.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef __FEEDFORWARDNN_H
00025 #define __FEEDFORWARDNN_H
00026
00027 #include "invertablemodel.h"
00028 #include "controller_misc.h"
00029 #include "regularisation.h"
00030
00031 #include <cmath>
00032
00033
00034 typedef double (*ActivationFunction) (double);
00035
00036
00037
00038 typedef double (*InvActivationFunction) (double, double);
00039
00040
00041 class FeedForwardNN : public InvertableModel {
00042 public:
00043
00044
00045 FeedForwardNN(const std::string& name, const std::string& revision)
00046 : InvertableModel(name, revision){};
00047 virtual ~FeedForwardNN(){};
00048
00049
00050 virtual void damp(double damping) =0 ;
00051
00052
00053
00054 static double linear(double z) { return z;}
00055 static double dlinear(double ) { return 1;}
00056 static double invlinear(double z, double xsi) { return xsi;}
00057
00058 static double tanh(double z) { return ::tanh(z); }
00059 static double dtanh(double z) { double k = ::tanh(z); return 1-k*k; }
00060 static double invtanh(double z, double xsi) { return g_s_expand2(z,xsi)*xsi; }
00061
00062
00063 static double tanhc(double z) { return ::tanh(z); }
00064 static double dtanhc(double z) { double k = ::tanh(clip(z, -3.0, 3.0)); return 1-k*k; }
00065
00066
00067 static double tanhr(double z) { return ::tanh(z); }
00068
00069 static double dtanhr(double z) { return 1.0/(1.0+z*z); }
00070
00071
00072 static double sigmoid(double z) { return 1/(1+exp(-z)); }
00073 static double dsigmoid(double z) { double k = sigmoid(clip(z, -3.0, 3.0)); return k*(1-k); }
00074 static double invsigmoid(double z, double xsi) { return 1/(0.01+dsigmoid(z))*xsi;}
00075 };
00076
00077
00078 #endif