Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

MultiLayerNetwork.h

Go to the documentation of this file.
00001 #ifndef MULTILAYERNETWORK_H
00002 #define MULTILAYERNETWORK_H
00003 
00004 
00005 #include "Layer.h"
00006 #include "InputLayer.h"
00007 #include "Network.h"
00008 #include "TrainingSet.h"
00009 #include "Control.h"
00010 
00011 namespace annie
00012 {
00026 class MultiLayerNetwork : public Network
00027 {
00028 protected:
00034     uint _nLayers;
00035 
00037     std::vector<Layer *> _layers;
00038 
00040     InputLayer *_inputLayer();
00041 
00043     Layer *_outputLayer();
00044 
00046     void _layerValid(uint layer) const;
00047 
00048     void _connectLayer(Layer &srcLayer, Layer &destLayer);
00049 public:
00050     static const real DEFAULT_MOMENTUM, DEFAULT_LEARNINGRATE;
00051     static const Creal CDEFAULT_MOMENTUM, CDEFAULT_LEARNINGRATE;
00055     #ifndef CONTROL
00056         MultiLayerNetwork(uint inputs);
00057     #else
00058         MultiLayerNetwork(uint inputs, uint neuronLabelOffset=0, PublicValues &pv=defaultControl);
00059         MultiLayerNetwork(uint inputs, PublicValues &pv);
00060     #endif
00061 
00063     MultiLayerNetwork(MultiLayerNetwork &srcNet);
00064 
00069     MultiLayerNetwork(const std::string &filename);
00070 
00071     virtual ~MultiLayerNetwork();
00072 
00074     virtual void addLayer(int size);
00075 
00082     virtual void connectLayer(uint srcLlayer);
00083 
00090     virtual void connect(uint srcLlayer, int srcNrn, int destNrn);
00091 
00099     virtual void connect(uint srcLlayer, int srcNrn, int destNrn, real weight);
00100 
00106     virtual void setBias(uint layer, int nrn, real bias);
00107 
00109     virtual uint getLayerCount() const;
00110 
00115     virtual Vector getOutput(const Vector &input);
00116 
00121     virtual Vector getOutput(real *input);
00122 
00131     virtual void train(TrainingSet &T, uint epochs, real learningRate=DEFAULT_LEARNINGRATE, real momentum = DEFAULT_MOMENTUM);
00132     
00133     virtual void train(TrainingSet &T, Creal epochs, Creal learningRate=CDEFAULT_LEARNINGRATE, Creal momentum = CDEFAULT_MOMENTUM);
00134     
00136     virtual void train(TrainingSet &T, PublicValues &parameters);
00137 
00139     void getError(TrainingSet &ts);
00140     
00142     void getErrorGREN(TrainingSet &ts);
00143 
00144     struct Error;   
00146     Error getErrorGREN(const Vector &input, const Vector &desired);
00147 
00152     virtual void trainExample(const Vector& input, const Vector& desiredOutput, real learningRate=DEFAULT_LEARNINGRATE, real momentum =  DEFAULT_MOMENTUM);
00153 
00159     virtual void save(const std::string &filename);
00160 
00169     virtual void setActivationFunction(uint layer, ActivationFunction f, ActivationFunction df);
00170 
00172     virtual const char *getClassName() const;
00173 
00174     
00176     void resetWeights();
00177 
00182     const Layer &getLayer(uint layer) const;
00183 
00187     uint getNeuronsCount() const;
00188 
00192     uint getLinksCount() const;
00193 
00194     
00199     Layer &getLayer(uint layer);
00200 
00202     operator std::string() const;
00203     #ifdef CONTROL
00204     PublicValues &getControl() { return *_control; }
00205     void setControl(PublicValues &ctrl) { _control = &ctrl; }
00206 
00207     void setLabelOffset(uint firstLabel) { _neuronLabelOffset = firstLabel; }
00208 
00215     virtual void trainGREN(MultiLayerNetwork &errorNetwork, TrainingSet &ts, uint epochs, real learningRate=DEFAULT_LEARNINGRATE, real momentum = DEFAULT_MOMENTUM);
00216   protected:
00218     void _attachGREN(MultiLayerNetwork &errorNetwork, bool detach); 
00219 
00221     void _trainExampleGREN(MultiLayerNetwork &errorNetwork, const Vector& input, real learningRate, real momentum);
00222 
00223     PublicValues *_control;
00224 
00227     struct  Error {
00230         void operator+= (const Error &e)    { _val += e._val; }
00231         Error(const Vector &diff);
00232         Error() :_val(2) { zero(); }
00233         Error(real delta);
00234 
00237         void publish(std::string name, real per=0, PublicValues &pv=defaultControl);
00238         void zero() { _val[0] = 0; _val[1] = 0; }
00239         real getSq() const { return _val[0]; }
00240         real getAbs() const { return _val[1]; }
00241       protected:
00242         Vector _val;
00243     };
00244     Error _exampleError; 
00245     #endif
00246     uint _neuronLabelOffset;    //start of labels of this network's neurons (--> 2 networks can interact)
00247 };
00248 
00250 #define DEFAULT_MLP_NPARS   \
00251     { "learningRate", "learing rate (alpha)", MultiLayerNetwork::DEFAULT_LEARNINGRATE },    \
00252     { "momentum", "learning momentum", MultiLayerNetwork::DEFAULT_MOMENTUM},    \
00253     { "epochs", "how many epochs to train. You can usually keep it inf and interrupt by ESC if neccesary", 1000. },
00254 
00255 }; //namespace annie
00256 #endif // define _MULTILAYERNETWORK_H
00257 

Generated on Fri Jun 18 13:18:10 2004 for Annie by doxygen 1.3.5