git-svn-id: http://moon:8086/svn/software/trunk/projects/RBM@602 b431acfa-c32f-4a4a-93f1-934dc6c82436
88 lines
1.8 KiB
C++
88 lines
1.8 KiB
C++
/*
|
|
* Rbm.hpp
|
|
*
|
|
* Created on: 21.09.2014
|
|
* Author: jens
|
|
*/
|
|
|
|
#ifndef RBM_HPP_
|
|
#define RBM_HPP_
|
|
|
|
#include "Weights.hpp"
|
|
#include <cmath>
|
|
#include <Eigen/Dense>
|
|
|
|
using namespace Eigen;
|
|
|
|
class Rbm
|
|
{
|
|
public:
|
|
struct Params
|
|
{
|
|
Params()
|
|
: m_weightDecay(0.0)
|
|
, m_learningRate(0.1)
|
|
, m_momentum(0.5)
|
|
, m_doRaoBlackwell(true)
|
|
, m_doSampleVisible(false)
|
|
, m_doSampleBatch(false)
|
|
, m_numGibbs(1)
|
|
{
|
|
}
|
|
|
|
double m_weightDecay;
|
|
double m_learningRate;
|
|
double m_momentum;
|
|
bool m_doRaoBlackwell;
|
|
bool m_doSampleVisible;
|
|
bool m_doSampleBatch;
|
|
size_t m_numGibbs;
|
|
};
|
|
|
|
Rbm(Weights &weights, const MatrixXd &batch);
|
|
~Rbm();
|
|
MatrixXd sample(MatrixXd const &src);
|
|
void sample(MatrixXd &dst, MatrixXd const &src);
|
|
static MatrixXd probsLogistic(MatrixXd const &src);
|
|
static RowVectorXd probsLogistic(RowVectorXd const &src);
|
|
void sampleGaussian(MatrixXd &dst, MatrixXd const &src);
|
|
void sampleGaussian(MatrixXd &srcDst);
|
|
static MatrixXd normalizeData(MatrixXd const &src);
|
|
void train(size_t numEpochs, size_t miniBatchSize, bool &doStop);
|
|
double getProgress() const;
|
|
void toHidden(RowVectorXd &h, RowVectorXd const &v);
|
|
void toVisible(RowVectorXd &v, RowVectorXd const &h);
|
|
void setWeightDecay(double value);
|
|
void setDoRaoBlackwell(bool flag);
|
|
void setDoSampleVisible(bool flag);
|
|
void setDoSampleBatch(bool flag);
|
|
void setNumGibbs(size_t value);
|
|
void setMuWeights(double value);
|
|
void setMomentum(double value);
|
|
MatrixXd const& getHiddenBatch();
|
|
MatrixXd const& getBatch();
|
|
void updateHiddenBatch();
|
|
Params const& params();
|
|
|
|
private:
|
|
Weights &m_w;
|
|
MatrixXd const &m_batch;
|
|
MatrixXd m_h;
|
|
noise_gen_t m_noise;
|
|
double m_progress;
|
|
Params m_params;
|
|
void noiseGaussian(MatrixXd &dst);
|
|
void noiseUniform(MatrixXd &dst);
|
|
|
|
protected:
|
|
virtual void onProgressChanged()
|
|
{
|
|
}
|
|
|
|
virtual void onParamsChanged()
|
|
{
|
|
}
|
|
};
|
|
|
|
#endif /* RBM_HPP_ */
|