OpenANN  1.1.0
An open source library for artificial neural networks.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SigmaPi.h
Go to the documentation of this file.
1 #ifndef OPENANN_LAYERS_SIGMA_PI_H_
2 #define OPENANN_LAYERS_SIGMA_PI_H_
3 
4 #include <Eigen/Core>
5 #include <vector>
6 #include <OpenANN/layers/Layer.h>
8 
9 namespace OpenANN
10 {
11 
28 class SigmaPi : public Layer
29 {
30 protected:
32  {
33  std::vector<int> position;
34  size_t weight;
35  };
36 
37  typedef std::vector<HigherOrderUnit> HigherOrderNeuron;
38 
40  bool bias;
42  double stdDev;
43 
44  Eigen::MatrixXd x;
45  Eigen::MatrixXd a;
46  Eigen::MatrixXd y;
47  Eigen::MatrixXd yd;
48  Eigen::MatrixXd deltas;
49  Eigen::MatrixXd e;
50 
51  std::vector<double> w;
52  std::vector<double> wd;
53  std::vector<HigherOrderNeuron> nodes;
54 
55 public:
64 
68  virtual OutputInfo initialize(std::vector<double*>& parameterPointers,
69  std::vector<double*>& parameterDerivativePointers);
70 
80  struct Constraint
81  {
83  virtual ~Constraint() {}
87  virtual double operator()(int p1, int p2) const;
88 
92  virtual double operator()(int p1, int p2, int p3) const;
93 
97  virtual double operator()(int p1, int p2, int p3, int p4) const;
98 
103  virtual bool isDefault() const;
104  };
105 
111  virtual SigmaPi& secondOrderNodes(int numbers);
112 
118  virtual SigmaPi& thirdOrderNodes(int numbers);
119 
125  virtual SigmaPi& fourthOrderNodes(int numbers);
126 
133  virtual SigmaPi& secondOrderNodes(int numbers, const Constraint& constrain);
134 
141  virtual SigmaPi& thirdOrderNodes(int numbers, const Constraint& constrain);
142 
149  virtual SigmaPi& fourthOrderNodes(int numbers, const Constraint& constrain);
150  virtual size_t nodenumber() const { return nodes.size(); };
151  virtual size_t parameter() const { return w.size(); };
152  virtual void initializeParameters();
153  virtual void updatedParameters();
154  virtual void forwardPropagate(Eigen::MatrixXd* x, Eigen::MatrixXd*& y,
155  bool dropout = false, double* error = 0);
156  virtual void backpropagate(Eigen::MatrixXd* ein, Eigen::MatrixXd*& eout,
157  bool backpropToPrevious);
158  virtual Eigen::MatrixXd& getOutput();
159  virtual Eigen::VectorXd getParameters();
160 };
161 
162 } // namespace OpenANN
163 
164 
165 #endif // OPENANN_LAYERS_SIGMA_PI_H_