From b20604e4f44e6a268f23a650b27557da1bce02d3 Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Wed, 6 Nov 2019 06:24:48 +0000 Subject: [PATCH] - Rbm: fixed parameter import git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@607 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- source/Rbm.cpp | 6 +++--- source/Rbm.hpp | 1 + source/Stack.cpp | 5 +++-- source/main.cpp | 18 ++++++++++++++---- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/source/Rbm.cpp b/source/Rbm.cpp index 608388a..e49d4c0 100644 --- a/source/Rbm.cpp +++ b/source/Rbm.cpp @@ -43,16 +43,16 @@ void Rbm::weightsInit(double stddev, double mu) } -void Rbm::fromJson(Json::Value params) +void Rbm::fromJson(Json::Value rbm) { + std::cout << "Importing Rbm" << std::endl; + m_params.fromJson(rbm["params"]); } Json::Value Rbm::toJson() const { std::cout << "Exporting Rbm" << std::endl; Json::Value rbm; - rbm["numVisible"] = m_bv.n_elem; - rbm["numHidden"] = m_bh.n_elem; rbm["params"] = m_params.toJson(); return rbm; } diff --git a/source/Rbm.hpp b/source/Rbm.hpp index 95ba41c..b7fb1ed 100644 --- a/source/Rbm.hpp +++ b/source/Rbm.hpp @@ -60,6 +60,7 @@ public: void fromJson(Json::Value params) { + std::cout << "Importing Rbm::Params" << std::endl; weightDecay = params["weightDecay"].asDouble(); learningRate = params["learningRate"].asDouble(); momentum = params["momentum"].asDouble(); diff --git a/source/Stack.cpp b/source/Stack.cpp index 17c4f46..3c17829 100644 --- a/source/Stack.cpp +++ b/source/Stack.cpp @@ -85,8 +85,9 @@ bool Stack::load() int numVisibleX = layer["numVisibleX"].asInt(); int numVisibleY = layer["numVisibleY"].asInt(); int numHidden = layer["numHidden"].asInt(); - - addLayer(new Layer(layername, i, numVisibleX, numVisibleY, numHidden)); + Layer *pLayer = new Layer(layername, i, numVisibleX, numVisibleY, numHidden); + pLayer->fromJson(layer["rbm"]); + addLayer(pLayer); } return true; diff --git a/source/main.cpp b/source/main.cpp index 962ac65..6a61d33 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -89,20 +89,29 @@ int main() size_t numTraining = batch.n_rows; printf("Loaded %d training samples\n", (int)numTraining); -#if 1 +#if 0 int i = 0; Layer *lowerLayer = new Layer("Layer", i, 16, 16, 8); stack.addLayer(lowerLayer); - for (++i; i < 1; i++) + for (++i; i < 4; i++) { Layer *layer = new Layer("Layer", i, lowerLayer->bh().n_elem, 1, lowerLayer->bh().n_elem >> 1); lowerLayer = layer; stack.addLayer(layer); } - Layer *layer = stack.getLayer(0); - layer->params().learningRate = 0.02; + stack.getLayer(0)->params().learningRate = 0.04; + stack.getLayer(0)->params().numEpochs = 1000; + + stack.getLayer(1)->params().learningRate = 0.03; + stack.getLayer(1)->params().numEpochs = 500; + + stack.getLayer(2)->params().learningRate = 0.02; + stack.getLayer(2)->params().numEpochs = 250; + + stack.getLayer(3)->params().learningRate = 0.01; + stack.getLayer(3)->params().numEpochs = 125; // Save project stack.save(); @@ -127,6 +136,7 @@ int main() // Save weights stack.saveWeights(); + Layer *layer = stack.getLayer(0); arma::mat v = arma::randu(numTraining, layer->bv().n_elem); arma::mat h = layer->toHiddenProbs(v); arma::mat r = layer->toVisibleProbs(h);