From 0f38b78093260fb0d29bf7368445af7eb15df53f Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Sun, 19 Oct 2014 20:28:36 +0000 Subject: [PATCH] - changed noise API - noise initialized with help of clock() git-svn-id: http://moon:8086/svn/software/trunk/projects/RBM@33 b431acfa-c32f-4a4a-93f1-934dc6c82436 --- Source/Layer.hpp | 4 ++-- Source/Weights.hpp | 6 +++--- Source/noise.c | 15 ++++++++------- Source/noise.h | 4 ++-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Source/Layer.hpp b/Source/Layer.hpp index e4b23dd..c016eff 100644 --- a/Source/Layer.hpp +++ b/Source/Layer.hpp @@ -94,7 +94,7 @@ public: for (i=0; i < m_numUnits; i++) { - sample = Noise_Uniform(&m_noise, 0.5); + sample = Noise_Uniform(&m_noise); m_states(i) = (double)(sample <= m_probs(i)); } } @@ -105,7 +105,7 @@ public: for (i=0; i < m_numUnits; i++) { - m_states(i) = Noise_Gaussian(&m_noise, 0, sigma) + lambda*accum(layer, weights, i); + m_states(i) = sigma*Noise_Gaussian(&m_noise) + lambda*accum(layer, weights, i); } } diff --git a/Source/Weights.hpp b/Source/Weights.hpp index b869c0d..a0d0bb0 100644 --- a/Source/Weights.hpp +++ b/Source/Weights.hpp @@ -71,19 +71,19 @@ public: for (i=0; i < m_numVisible; i++) { - m_bv(i) = kdev*Noise_Uniform(&m_noise, 0.5); + m_bv(i) = kdev*Noise_Uniform(&m_noise); } for (j=0; j < m_numHidden; j++) { - m_bh(j) = kdev*Noise_Uniform(&m_noise, 0.5); + m_bh(j) = kdev*Noise_Uniform(&m_noise); } for (i=0; i < m_numVisible; i++) { for (j=0; j < m_numHidden; j++) { - m_w(i,j) = kdev*Noise_Uniform(&m_noise, 0.5); + m_w(i,j) = kdev*Noise_Uniform(&m_noise); } } } diff --git a/Source/noise.c b/Source/noise.c index c3be36c..00f8d4f 100644 --- a/Source/noise.c +++ b/Source/noise.c @@ -45,26 +45,28 @@ double ran0(long *idum) // -------------------------------------------------------------- void Noise_Init(noise_gen_t *pObj, long seed) { - pObj->state = seed; + + pObj->state = seed ^ clock(); } void Noise_Free(noise_gen_t *pObj) { } -double Noise_Uniform(noise_gen_t *pObj, double mu) +// 0 .. 1 +double Noise_Uniform(noise_gen_t *pObj) { - return ran0(&pObj->state) + mu -0.5; + return ran0(&pObj->state); } -double Noise_Gaussian(noise_gen_t *pObj, double mu, double sigma) +double Noise_Gaussian(noise_gen_t *pObj) { double U1, U2, V1, V2, S, Y; do { - U1 = Noise_Uniform(pObj, 0.5); // U1=[0,1] - U2 = Noise_Uniform(pObj, 0.5); // U2=[0,1] + U1 = Noise_Uniform(pObj); // U1=[0,1] + U2 = Noise_Uniform(pObj); // U2=[0,1] V1 = 2 * U1 - 1; // V1=[-1,1] V2 = 2 * U2 - 1; // V2=[-1,1] S = V1 * V1 + V2 * V2; @@ -73,7 +75,6 @@ double Noise_Gaussian(noise_gen_t *pObj, double mu, double sigma) // X = sqrt(-2 * log(S) / S) * V1; Y = sqrt(-2 * log(S) / S) * V2; - Y = mu + sigma*Y; return Y; } diff --git a/Source/noise.h b/Source/noise.h index 055c59b..cc56e29 100644 --- a/Source/noise.h +++ b/Source/noise.h @@ -30,8 +30,8 @@ extern "C" { // -------------------------------------------------------------- void Noise_Init(noise_gen_t *pObj, long seed); void Noise_Free(noise_gen_t *pObj); -double Noise_Uniform(noise_gen_t *pObj, double mu); -double Noise_Gaussian(noise_gen_t *pObj, double mu, double sigma); +double Noise_Uniform(noise_gen_t *pObj); +double Noise_Gaussian(noise_gen_t *pObj); #if defined(__cplusplus) }