OpenANN  1.1.0
An open source library for artificial neural networks.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
RBM.h
Go to the documentation of this file.
1 #ifndef OPENANN_RBM_H_
2 #define OPENANN_RBM_H_
3 
4 #include <OpenANN/Learner.h>
6 #include <OpenANN/layers/Layer.h>
9 #include <Eigen/Core>
10 #include <vector>
11 
12 namespace OpenANN
13 {
14 
15 
16 class RandomNumberGenerator;
17 
18 
51 class RBM : public Learner, public Layer
52 {
54  int D, H;
55  int cdN;
56  double stdDev;
57  Eigen::MatrixXd W, posGradW, negGradW, Wd;
58  Eigen::VectorXd bv, posGradBv, negGradBv, bh, posGradBh, negGradBh, bhd;
59  Eigen::MatrixXd pv, v, ph, h, phd;
60  Eigen::MatrixXd deltas, e;
61  int K;
62  Eigen::VectorXd params, grad;
63  bool backprop;
64  Regularization regularization;
65 
66 public:
77  RBM(int D, int H, int cdN = 1, double stdDev = 0.01, bool backprop = true,
78  Regularization regularization = Regularization());
79  virtual ~RBM();
80 
81  // Learner interface
82  virtual Eigen::VectorXd operator()(const Eigen::VectorXd& x);
83  virtual Eigen::MatrixXd operator()(const Eigen::MatrixXd& X);
84  virtual bool providesInitialization();
85  virtual void initialize();
86  virtual unsigned int examples();
87  virtual unsigned int dimension();
88  virtual void setParameters(const Eigen::VectorXd& parameters);
89  virtual const Eigen::VectorXd& currentParameters();
90  virtual double error();
91  virtual double error(unsigned int n);
92  virtual bool providesGradient();
93  virtual Eigen::VectorXd gradient();
94  virtual Eigen::VectorXd gradient(unsigned int n);
95  virtual void errorGradient(std::vector<int>::const_iterator startN,
96  std::vector<int>::const_iterator endN,
97  double& value, Eigen::VectorXd& grad);
98 
99  // Layer interface
100  virtual void forwardPropagate(Eigen::MatrixXd* x, Eigen::MatrixXd*& y,
101  bool dropout, double* error = 0);
102  virtual void backpropagate(Eigen::MatrixXd* ein, Eigen::MatrixXd*& eout,
103  bool backpropToPrevious);
104  virtual Eigen::MatrixXd& getOutput();
105  virtual Eigen::VectorXd getParameters();
106  virtual OutputInfo initialize(std::vector<double*>& parameterPointers,
107  std::vector<double*>& parameterDerivativePointers);
108  virtual void initializeParameters() {}
109  virtual void updatedParameters() {}
110 
111  // RBM interface
116  int visibleUnits();
121  int hiddenUnits();
126  const Eigen::MatrixXd& getWeights();
131  const Eigen::MatrixXd& getVisibleProbs();
136  const Eigen::MatrixXd& getVisibleSample();
144  Eigen::MatrixXd reconstructProb(int n, int steps);
148  void sampleHgivenV();
152  void sampleVgivenH();
153 private:
154  void reality();
155  void daydream();
156  void fillGradient();
157 };
158 
159 } // namespace OpenANN
160 
161 #endif // OPENANN_RBM_H_