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
00010 namespace annie
00011 {
00024 class MultiLayerNetwork : public Network
00025 {
00026 protected:
00031 int _nLayers;
00032
00034 std::vector<Layer *> _layers;
00035
00037 InputLayer *_inputLayer();
00038
00040 Layer *_outputLayer();
00041 public:
00045 MultiLayerNetwork(int inputs);
00046
00048 MultiLayerNetwork(MultiLayerNetwork &srcNet);
00049
00054 MultiLayerNetwork(const char *filename);
00055
00056 virtual ~MultiLayerNetwork();
00057
00059 virtual void addLayer(int size);
00060
00067 virtual void connectLayer(int srcLayer);
00068
00075 virtual void connect(int srcLayer, int srcNrn, int destNrn);
00076
00084 virtual void connect(int srcLayer, int srcNrn, int destNrn, real weight);
00085
00091 virtual void setBias(int layer, int nrn, real bias);
00092
00094 virtual int getLayerCount();
00095
00100 virtual VECTOR getOutput(VECTOR &input);
00101
00106 virtual VECTOR getOutput(real *input);
00107
00116 virtual void train(TrainingSet &T, int epochs, real learningRate, real momentum = 0.0);
00117
00128 virtual void train(TrainingSet &T, int epochs, real learningRate, real momentum, bool verbose);
00129
00135 virtual void save(const char *filename);
00136
00145 virtual void setActivationFunction(int layer, ActivationFunction f, ActivationFunction df);
00146
00148 virtual const char *getClassName();
00149 };
00150 };
00151 #endif // define _MULTILAYERNETWORK_H
00152