- use custom noise for bugfixing

- init weights with zero mean uniform noise

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@598 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2019-10-29 07:00:59 +00:00
parent 595be173b1
commit a061fdf0da
5 changed files with 147 additions and 14 deletions
+18 -9
View File
@@ -13,14 +13,13 @@
#include "Rbm.hpp"
Rbm::Rbm(size_t numVisible, size_t numHidden, double weightInit)
Rbm::Rbm(size_t numVisible, size_t numHidden)
: m_params()
, m_weightInit(weightInit)
, m_w(numVisible, numHidden)
, m_bv(1, numVisible)
, m_bh(1, numHidden)
{
weightsInit(0.0, m_weightInit);
Noise_Init(&m_noise, 0x32727155);
}
Rbm::Rbm(const Rbm& orig)
@@ -33,13 +32,14 @@ Rbm::Rbm(const Rbm& orig)
Rbm::~Rbm()
{
Noise_Free(&m_noise);
}
void Rbm::weightsInit(double mu, double stddev)
void Rbm::weightsInit(double stddev, double mu)
{
uniform(m_w, mu, stddev);
uniform(m_bh, mu, stddev);
uniform(m_bv, mu, stddev);
uniform(m_w, stddev, mu);
uniform(m_bv, stddev, mu);
uniform(m_bh, stddev, mu);
}
@@ -53,7 +53,6 @@ Json::Value Rbm::toJson() const
Json::Value rbm;
rbm["numVisible"] = m_bv.n_elem;
rbm["numHidden"] = m_bh.n_elem;
rbm["weightInit"] = m_weightInit;
rbm["params"] = m_params.toJson();
return rbm;
}
@@ -239,9 +238,19 @@ arma::mat Rbm::toVisibleProbs(const arma::mat &hidden) const
return probsLogistic(toVisibleState(hidden));
}
void Rbm::uniform(arma::mat& srcDst, double mu, double stdDev)
void Rbm::uniform(arma::mat& srcDst, double stdDev, double mu)
{
#if 1
for (size_t i=0; i < srcDst.n_rows; i++)
{
for (size_t j=0; j < srcDst.n_cols; j++)
{
srcDst(i, j) = stdDev*(Noise_Uniform(&m_noise) + mu - 0.5);
}
}
#else
srcDst = stdDev*arma::randu(srcDst.n_rows, srcDst.n_cols) + mu;
#endif
}
const arma::mat& Rbm::w() const