- Rbm: fixed parameter import

git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@607 b431acfa-c32f-4a4a-93f1-934dc6c82436
This commit is contained in:
2019-11-06 06:24:48 +00:00
parent 3ef7b07f5e
commit b20604e4f4
4 changed files with 21 additions and 9 deletions
+3 -3
View File
@@ -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 Json::Value Rbm::toJson() const
{ {
std::cout << "Exporting Rbm" << std::endl; std::cout << "Exporting Rbm" << std::endl;
Json::Value rbm; Json::Value rbm;
rbm["numVisible"] = m_bv.n_elem;
rbm["numHidden"] = m_bh.n_elem;
rbm["params"] = m_params.toJson(); rbm["params"] = m_params.toJson();
return rbm; return rbm;
} }
+1
View File
@@ -60,6 +60,7 @@ public:
void fromJson(Json::Value params) void fromJson(Json::Value params)
{ {
std::cout << "Importing Rbm::Params" << std::endl;
weightDecay = params["weightDecay"].asDouble(); weightDecay = params["weightDecay"].asDouble();
learningRate = params["learningRate"].asDouble(); learningRate = params["learningRate"].asDouble();
momentum = params["momentum"].asDouble(); momentum = params["momentum"].asDouble();
+3 -2
View File
@@ -85,8 +85,9 @@ bool Stack::load()
int numVisibleX = layer["numVisibleX"].asInt(); int numVisibleX = layer["numVisibleX"].asInt();
int numVisibleY = layer["numVisibleY"].asInt(); int numVisibleY = layer["numVisibleY"].asInt();
int numHidden = layer["numHidden"].asInt(); int numHidden = layer["numHidden"].asInt();
Layer *pLayer = new Layer(layername, i, numVisibleX, numVisibleY, numHidden);
addLayer(new Layer(layername, i, numVisibleX, numVisibleY, numHidden)); pLayer->fromJson(layer["rbm"]);
addLayer(pLayer);
} }
return true; return true;
+14 -4
View File
@@ -89,20 +89,29 @@ int main()
size_t numTraining = batch.n_rows; size_t numTraining = batch.n_rows;
printf("Loaded %d training samples\n", (int)numTraining); printf("Loaded %d training samples\n", (int)numTraining);
#if 1 #if 0
int i = 0; int i = 0;
Layer *lowerLayer = new Layer("Layer", i, 16, 16, 8); Layer *lowerLayer = new Layer("Layer", i, 16, 16, 8);
stack.addLayer(lowerLayer); 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); Layer *layer = new Layer("Layer", i, lowerLayer->bh().n_elem, 1, lowerLayer->bh().n_elem >> 1);
lowerLayer = layer; lowerLayer = layer;
stack.addLayer(layer); stack.addLayer(layer);
} }
Layer *layer = stack.getLayer(0); stack.getLayer(0)->params().learningRate = 0.04;
layer->params().learningRate = 0.02; 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 // Save project
stack.save(); stack.save();
@@ -127,6 +136,7 @@ int main()
// Save weights // Save weights
stack.saveWeights(); stack.saveWeights();
Layer *layer = stack.getLayer(0);
arma::mat v = arma::randu(numTraining, layer->bv().n_elem); arma::mat v = arma::randu(numTraining, layer->bv().n_elem);
arma::mat h = layer->toHiddenProbs(v); arma::mat h = layer->toHiddenProbs(v);
arma::mat r = layer->toVisibleProbs(h); arma::mat r = layer->toVisibleProbs(h);