diff --git a/mnist_2.prj b/mnist_2.prj index 4c60814..d4a9150 100644 --- a/mnist_2.prj +++ b/mnist_2.prj @@ -18,80 +18,11 @@ "learningRate" : 0.10000000000000001, "momentum" : 0.5, "numGibbs" : 1, - "weightDecay" : 0, - "weightInit" : 0.01 - } + "weightDecay" : 0 + }, + "weightInit" : 0.01 }, "weights_file" : "Layer.0.weights.dat" - }, - { - "id" : 1, - "name" : "Layer", - "numHidden" : 128, - "numVisibleX" : 256, - "numVisibleY" : 1, - "rbm" : { - "numHidden" : 128, - "numVisible" : 256, - "params" : { - "doRaoBlackwell" : 1, - "doSampleBatch" : 0, - "gibbsDoSampleHidden" : 1, - "gibbsDoSampleVisible" : 0, - "learningRate" : 0.10000000000000001, - "momentum" : 0.5, - "numGibbs" : 1, - "weightDecay" : 0, - "weightInit" : 0.01 - } - }, - "weights_file" : "Layer.1.weights.dat" - }, - { - "id" : 2, - "name" : "Layer", - "numHidden" : 64, - "numVisibleX" : 128, - "numVisibleY" : 1, - "rbm" : { - "numHidden" : 64, - "numVisible" : 128, - "params" : { - "doRaoBlackwell" : 1, - "doSampleBatch" : 0, - "gibbsDoSampleHidden" : 1, - "gibbsDoSampleVisible" : 0, - "learningRate" : 0.10000000000000001, - "momentum" : 0.5, - "numGibbs" : 1, - "weightDecay" : 0, - "weightInit" : 0.01 - } - }, - "weights_file" : "Layer.2.weights.dat" - }, - { - "id" : 3, - "name" : "Layer", - "numHidden" : 32, - "numVisibleX" : 64, - "numVisibleY" : 1, - "rbm" : { - "numHidden" : 32, - "numVisible" : 64, - "params" : { - "doRaoBlackwell" : 1, - "doSampleBatch" : 0, - "gibbsDoSampleHidden" : 1, - "gibbsDoSampleVisible" : 0, - "learningRate" : 0.10000000000000001, - "momentum" : 0.5, - "numGibbs" : 1, - "weightDecay" : 0, - "weightInit" : 0.01 - } - }, - "weights_file" : "Layer.3.weights.dat" } ], "name" : "mnist_2" diff --git a/source/Rbm.cpp b/source/Rbm.cpp index c24fb19..3f809f7 100644 --- a/source/Rbm.cpp +++ b/source/Rbm.cpp @@ -13,13 +13,14 @@ #include "Rbm.hpp" -Rbm::Rbm(size_t numVisible, size_t numHidden) +Rbm::Rbm(size_t numVisible, size_t numHidden, double weightInit) : m_params() +, m_weightInit(weightInit) , m_w(numVisible, numHidden) , m_bv(1, numVisible) , m_bh(1, numHidden) { - weightsInit(0.0, m_params.weightInit); + weightsInit(0.0, m_weightInit); } Rbm::Rbm(const Rbm& orig) @@ -52,11 +53,11 @@ 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; } - void Rbm::train(const arma::mat& batch, size_t miniBatchSize, size_t numEpochs, IListener* pListener) { Status status; diff --git a/source/Rbm.hpp b/source/Rbm.hpp index a7b3bc4..7ae07f7 100644 --- a/source/Rbm.hpp +++ b/source/Rbm.hpp @@ -26,9 +26,8 @@ public: struct Params { Params() - : weightInit(0.01) + : learningRate(0.1) , weightDecay(0.0) - , learningRate(0.1) , momentum(0.5) , doRaoBlackwell(true) , gibbsDoSampleVisible(false) @@ -42,7 +41,6 @@ public: { std::cout << "Exporting Rbm::Params" << std::endl; Json::Value params; - params["weightInit"] = weightInit; params["weightDecay"] = weightDecay; params["learningRate"] = learningRate; params["momentum"] = momentum; @@ -57,7 +55,6 @@ public: void fromJson(Json::Value params) { - weightInit = params["weightInit"].asDouble(); weightDecay = params["weightDecay"].asDouble(); learningRate = params["learningRate"].asDouble(); momentum = params["momentum"].asDouble(); @@ -68,7 +65,6 @@ public: numGibbs = params["numGibbs"].asUInt(); } - double weightInit; double weightDecay; double learningRate; double momentum; @@ -112,7 +108,7 @@ public: } }; - Rbm(size_t numVisible, size_t numHidden); + Rbm(size_t numVisible, size_t numHidden, double weightInit=0.01); Rbm(const Rbm& orig); virtual ~Rbm(); @@ -132,6 +128,7 @@ public: private: const Params m_params; + double m_weightInit; 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); diff --git a/source/RbmLayer.cpp b/source/RbmLayer.cpp index 8df16de..33acf05 100644 --- a/source/RbmLayer.cpp +++ b/source/RbmLayer.cpp @@ -149,7 +149,7 @@ bool RbmLayer::saveWeights(const string &prjname) Json::Value RbmLayer::toJson() const { - std::cout << "Exporting RbmLayer " << to_string((int)m_id) << std::endl; + std::cout << "Exporting Layer " << to_string((int)m_id) << std::endl; Json::Value layer; layer["name"] = m_name; layer["id"] = (int)m_id; diff --git a/test.prj b/test.prj index daddf2b..b4984fb 100644 --- a/test.prj +++ b/test.prj @@ -18,9 +18,9 @@ "learningRate" : 0.10000000000000001, "momentum" : 0.5, "numGibbs" : 1, - "weightDecay" : 0, - "weightInit" : 0.01 - } + "weightDecay" : 0 + }, + "weightInit" : 0.01 }, "weights_file" : "Layer.0.weights.dat" }