00001 #ifndef __ONELAYERFFNN_H
00002 #define __ONELAYERFFNN_H
00003
00004 #include "feedforwardnn.h"
00005 #include "randomgenerator.h"
00006
00007
00008 class OneLayerFFNN : public FeedForwardNN {
00009 public:
00010
00011
00012
00013
00014
00015 OneLayerFFNN(double eps,
00016 double factor_bias = 0.1)
00017 : eps(eps), factor_bias(factor_bias){
00018 actfun = linear;
00019 dactfun = dlinear;
00020
00021 initialised = false;
00022 }
00023
00024
00025
00026
00027
00028
00029 OneLayerFFNN(double eps,
00030 double factor_bias,
00031 ActivationFunction actfun,
00032 ActivationFunction dactfun)
00033 : eps(eps), factor_bias(factor_bias), actfun(actfun), dactfun(dactfun) {
00034 initialised = false;
00035 }
00036 virtual ~OneLayerFFNN(){ }
00037
00038
00039
00040
00041
00042
00043 virtual void init(unsigned int inputDim, unsigned int outputDim,
00044 double unit_map = 0.0, RandGen* randGen = 0);
00045
00046 virtual const matrix::Matrix process (const matrix::Matrix& input);
00047
00048 virtual const matrix::Matrix learn (const matrix::Matrix& input,
00049 const matrix::Matrix& nom_output,
00050 double learnRateFactor = 1);
00051
00052
00053 virtual unsigned int getInputDim() const {
00054 return weights.getN();
00055 }
00056
00057 virtual unsigned int getOutputDim() const {
00058 return weights.getM();
00059 }
00060
00061 virtual const matrix::Matrix& getWeights() const { return weights; }
00062 virtual const matrix::Matrix& getBias() const { return bias; }
00063
00064
00065 virtual void damp(double damping){
00066 weights *= (1-damping);
00067 bias *= (1-damping);
00068 }
00069
00070
00071
00072 bool store(FILE* f) const;
00073
00074 bool restore(FILE* f);
00075
00076
00077 virtual paramkey getName() const {
00078 return paramkey("onelayerffnn");
00079 }
00080
00081 virtual paramval getParam(const paramkey key) const {
00082 if(key == "eps") return eps;
00083 else return 0.0;
00084 }
00085
00086 virtual bool setParam(const paramkey key, paramval val){
00087 if( key == "eps") {
00088 eps = val;
00089 return true;
00090 } else return false;
00091 }
00092
00093 virtual paramlist getParamList() const{
00094 paramlist l;
00095 l.push_back(std::pair<paramkey, paramval> ("eps", eps));
00096 return l;
00097 }
00098
00099
00100 private:
00101 double eps;
00102 double factor_bias;
00103 ActivationFunction actfun;
00104 ActivationFunction dactfun;
00105
00106 private:
00107 bool initialised;
00108 matrix::Matrix weights;
00109 matrix::Matrix bias;
00110 };
00111
00112 #endif