From de33b3ecbd557606058bdb3b27a6175ed09cad1d Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Tue, 22 Oct 2019 06:30:21 +0000 Subject: [PATCH] - weights and biases are allocated outside Rbm git-svn-id: http://moon:8086/svn/software/trunk/projects/Rbm@565 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- source/Rbm.cpp | 11 +++++++---- source/Rbm.hpp | 17 ++++++++++------- source/main.cpp | 7 +++++-- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/source/Rbm.cpp b/source/Rbm.cpp index cf1e698..bb242e1 100644 --- a/source/Rbm.cpp +++ b/source/Rbm.cpp @@ -14,10 +14,10 @@ #include "Rbm.hpp" #include "noise.h" -Rbm::Rbm(size_t numVisible, size_t numHidden) -: m_w(numVisible, numHidden) -, m_bh(1, numHidden) -, m_bv(1, numVisible) +Rbm::Rbm(arma::mat &w, arma::mat &bv, arma::mat &bh) +: m_w(w) +, m_bv(bv) +, m_bh(bh) { Noise_Init(&m_noise, 0x32727155); uniform(m_w); @@ -26,6 +26,9 @@ Rbm::Rbm(size_t numVisible, size_t numHidden) } Rbm::Rbm(const Rbm& orig) +: m_w(orig.m_w) +, m_bv(orig.m_bv) +, m_bh(orig.m_bh) { } diff --git a/source/Rbm.hpp b/source/Rbm.hpp index cced10b..6355edb 100644 --- a/source/Rbm.hpp +++ b/source/Rbm.hpp @@ -65,22 +65,25 @@ public: } }; - Rbm(size_t numVisible, size_t numHidden); + Rbm(arma::mat &w, arma::mat &bv, arma::mat &bh); Rbm(const Rbm& orig); virtual ~Rbm(); void train(arma::mat const &batch, size_t numEpochs, size_t sizeMiniBatch, Params const ¶ms, IListener *pListener); - arma::mat sample(arma::mat const &src); - static arma::mat probsLogistic(arma::mat const &src); arma::mat toHidden(const arma::mat &v); arma::mat toVisible(const arma::mat &h); - void uniform(arma::mat &srcDst, double mu=0.0, double stdDev=1.0); + arma::mat& weights(); + arma::mat& bias_visible(); + arma::mat& bias_hidden(); private: noise_gen_t m_noise; - arma::mat m_w; - arma::mat m_bh; - arma::mat m_bv; + arma::mat &m_w; + arma::mat &m_bh; + arma::mat &m_bv; + 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); }; #endif /* RBM_HPP */ diff --git a/source/main.cpp b/source/main.cpp index 7502023..9e013ab 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -54,11 +54,14 @@ int main() RbmListener statusDisplay; Rbm::Params params; - Rbm rbm(28*28, 64); + arma::mat w = arma::zeros(28*28, 64); + arma::mat bv = arma::zeros(1, 28*28); + arma::mat bh = arma::zeros(1, 64); + Rbm rbm(w, bv, bh); arma::mat batch = arma::randu(100, 28*28); rbm.train(batch, 10, 10, params, &statusDisplay); - arma::mat v = arma::randu(10, 28*28); + arma::mat v = arma::randu(100, 28*28); arma::mat h = rbm.toHidden(v); arma::mat r = rbm.toVisible(h); return 0;