- weights and biases are allocated outside Rbm

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@565 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2019-10-22 06:30:21 +00:00
parent 675a5485fe
commit de33b3ecbd
3 changed files with 22 additions and 13 deletions
+7 -4
View File
@@ -14,10 +14,10 @@
#include "Rbm.hpp"
#include "noise.h"
Rbm::Rbm(size_t numVisible, size_t numHidden)
: m_w(numVisible, numHidden)
, m_bh(1, numHidden)
, m_bv(1, numVisible)
Rbm::Rbm(arma::mat &w, arma::mat &bv, arma::mat &bh)
: m_w(w)
, m_bv(bv)
, m_bh(bh)
{
Noise_Init(&m_noise, 0x32727155);
uniform(m_w);
@@ -26,6 +26,9 @@ Rbm::Rbm(size_t numVisible, size_t numHidden)
}
Rbm::Rbm(const Rbm& orig)
: m_w(orig.m_w)
, m_bv(orig.m_bv)
, m_bh(orig.m_bh)
{
}
+10 -7
View File
@@ -65,22 +65,25 @@ public:
}
};
Rbm(size_t numVisible, size_t numHidden);
Rbm(arma::mat &w, arma::mat &bv, arma::mat &bh);
Rbm(const Rbm& orig);
virtual ~Rbm();
void train(arma::mat const &batch, size_t numEpochs, size_t sizeMiniBatch, Params const &params, IListener *pListener);
arma::mat sample(arma::mat const &src);
static arma::mat probsLogistic(arma::mat const &src);
arma::mat toHidden(const arma::mat &v);
arma::mat toVisible(const arma::mat &h);
void uniform(arma::mat &srcDst, double mu=0.0, double stdDev=1.0);
arma::mat& weights();
arma::mat& bias_visible();
arma::mat& bias_hidden();
private:
noise_gen_t m_noise;
arma::mat m_w;
arma::mat m_bh;
arma::mat m_bv;
arma::mat &m_w;
arma::mat &m_bh;
arma::mat &m_bv;
arma::mat sample(arma::mat const &src);
static arma::mat probsLogistic(arma::mat const &src);
void uniform(arma::mat &srcDst, double mu=0.0, double stdDev=1.0);
};
#endif /* RBM_HPP */
+5 -2
View File
@@ -54,11 +54,14 @@ int main()
RbmListener statusDisplay;
Rbm::Params params;
Rbm rbm(28*28, 64);
arma::mat w = arma::zeros(28*28, 64);
arma::mat bv = arma::zeros(1, 28*28);
arma::mat bh = arma::zeros(1, 64);
Rbm rbm(w, bv, bh);
arma::mat batch = arma::randu(100, 28*28);
rbm.train(batch, 10, 10, params, &statusDisplay);
arma::mat v = arma::randu(10, 28*28);
arma::mat v = arma::randu(100, 28*28);
arma::mat h = rbm.toHidden(v);
arma::mat r = rbm.toVisible(h);
return 0;