From 963ee3cd9dbdbf1a19307aabc14c135f99a1387a Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Wed, 19 Jan 2022 11:01:37 +0000 Subject: [PATCH] - bring back calcContextBatch git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@840 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- source/Layer.cpp | 17 +++++++++++++++++ source/Layer.hpp | 3 ++- source/MainComponent.cpp | 2 +- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/source/Layer.cpp b/source/Layer.cpp index e4dea72..29a8a63 100644 --- a/source/Layer.cpp +++ b/source/Layer.cpp @@ -118,6 +118,23 @@ arma::mat Layer::vc_to_v(const arma::mat& vc) const return arma::reshape(vc, 1, numVisible() - m_numContext); } +void Layer::calcContextBatch(arma::mat& batch) +{ + size_t numTraining = batch.n_rows; + + if (m_numContext > 0 and numTraining > 0) + { + for (int i = 1; i < numTraining; i++) + { + arma::mat v = batch.row(i - 1); + arma::mat h = arma::zeros(1, numHidden()); + gibbs_vh(v, h); + arma::mat training_with_ctx = arma::join_rows(batch.row(i).cols(0, numVisible() - m_numContext - 1), h); + batch.row(i) = training_with_ctx; + } + } +} + void Layer::train(const arma::mat& batch, IListener* pListener) { std::cout << m_name << ": " << " Training of layer " << std::to_string(id()) << std::endl; diff --git a/source/Layer.hpp b/source/Layer.hpp index ec74cf1..780d3c9 100644 --- a/source/Layer.hpp +++ b/source/Layer.hpp @@ -48,7 +48,8 @@ public: bool weightsLoad(std::string const &dir, std::string const &prj); bool weightsSave(std::string const &dir, std::string const &prj); - void train(arma::mat const &batch, IListener *pListener=nullptr); + void calcContextBatch(arma::mat &batch); + void train(arma::mat const &batch, IListener *pListener=nullptr); arma::mat to_h_gibbs(const arma::mat& v_probs); arma::mat to_v_gibbs(const arma::mat& h_probs); diff --git a/source/MainComponent.cpp b/source/MainComponent.cpp index d106401..c0154a6 100644 --- a/source/MainComponent.cpp +++ b/source/MainComponent.cpp @@ -903,7 +903,7 @@ const juce::String& MainComponent::getBaseDir() void MainComponent::run() { trainButton->setButtonText (TRANS("Stop")); -// m_pLayer->calcContextBatch(m_stack->trainingBatch()); + m_pLayer->calcContextBatch(m_stack->trainingBatch()); m_stack->train(m_pLayer->id(), m_stack->trainingBatch(), this); trainButton->setButtonText (TRANS("Train")); }