OpenANN  1.1.0
An open source library for artificial neural networks.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
SparseAutoEncoder.h
Go to the documentation of this file.
1 #ifndef OPENANN_SPARSE_AUTO_ENCODER_H_
2 #define OPENANN_SPARSE_AUTO_ENCODER_H_
3 
4 #include <OpenANN/Learner.h>
6 #include <OpenANN/layers/Layer.h>
7 
8 namespace OpenANN
9 {
10 
20 class SparseAutoEncoder : public Learner, public Layer
21 {
22  int D, H;
23  double beta, rho, lambda;
25  Eigen::MatrixXd X;
26  Eigen::MatrixXd W1, W2, W1d, W2d;
27  Eigen::VectorXd b1, b2, b1d, b2d;
28  Eigen::MatrixXd A1, Z1, G1D, A2, Z2, G2D;
29  Eigen::VectorXd parameters, grad;
30  Eigen::MatrixXd dEdZ2, dEdZ1;
31  Eigen::VectorXd meanActivation;
32 public:
42  SparseAutoEncoder(int D, int H, double beta, double rho, double lambda,
43  ActivationFunction act);
44 
45  // Learner interface
46  virtual Eigen::VectorXd operator()(const Eigen::VectorXd& x);
47  virtual Eigen::MatrixXd operator()(const Eigen::MatrixXd& X);
48  virtual bool providesInitialization();
49  virtual void initialize();
50  virtual unsigned int dimension();
51  virtual void setParameters(const Eigen::VectorXd& parameters);
52  virtual const Eigen::VectorXd& currentParameters();
53  virtual double error();
54  virtual bool providesGradient();
55  virtual Eigen::VectorXd gradient();
56  virtual void errorGradient(double& value, Eigen::VectorXd& grad);
58 
59  // Layer interface
60  virtual void forwardPropagate(Eigen::MatrixXd* x, Eigen::MatrixXd*& y,
61  bool dropout, double* error = 0);
62  virtual void backpropagate(Eigen::MatrixXd* ein, Eigen::MatrixXd*& eout,
63  bool backpropToPrevious);
64  virtual Eigen::MatrixXd& getOutput();
65  virtual Eigen::VectorXd getParameters();
66  virtual OutputInfo initialize(std::vector<double*>& parameterPointers,
67  std::vector<double*>& parameterDerivativePointers);
68  virtual void initializeParameters();
69  virtual void updatedParameters() {}
70 
71  // SAE interface
72  Eigen::MatrixXd getInputWeights();
73  Eigen::MatrixXd getOutputWeights();
74  Eigen::VectorXd reconstruct(const Eigen::VectorXd& x);
75 };
76 
77 } // OpenANN
78 
79 #endif // OPENANN_SPARSE_AUTO_ENCODER_H_