109 REQUIRE(features != NULL,
"Invalid (NULL) feature pointer\n");
111 "Number of features (%i) must match the RBM's number of visible units "
116 int32_t training_set_size = inputs.
num_cols;
128 param_updates.
zero();
149 inputs.num_rows, gd_mini_batch_size,
false);
167 SG_INFO(
"Epoch %i: reconstruction Error = %f\n",i,
170 SG_INFO(
"Epoch %i: Pseudo-log-likelihood = %f\n",i,
183 for (int32_t i=0; i<num_gibbs_steps; i++)
188 if (i<num_gibbs_steps-1)
194 int32_t num_gibbs_steps, int32_t batch_size)
197 "Visible group index (%i) out of bounds (%i)\n", V,
m_num_visible);
199 sample(num_gibbs_steps, batch_size);
215 "Visible group index (%i) out of bounds (%i)\n", E,
m_num_visible);
227 for (int32_t n=0; n<num_gibbs_steps; n++)
232 if (n<num_gibbs_steps-1)
249 "Visible group index (%i) out of bounds (%i)\n", V,
m_num_visible);
251 "Visible group index (%i) out of bounds (%i)\n", E,
m_num_visible);
290 bv_buffer = B.transpose()*V;
293 wv_buffer.colwise() = C;
301 float64_t F = -1.0*(bv_term+wv_term)/m_batch_size;
311 F += 0.5*
CMath::pow(visible(i+offset,j),2)/m_batch_size;
325 if (hidden_mean_given_visible.
num_rows==0)
383 for (int32_t i=0; i<len; i++)
391 for (int32_t i=0; i<len; i++)
413 for (int32_t i=0; i<len; i++)
425 SG_ERROR(
"Pseudo-likelihood is only supported for binary visible units\n");
440 visible(indices[j],j) = 1.0-visible(indices[j],j);
445 visible(indices[j],j) = 1.0-visible(indices[j],j);
464 for (int32_t i=0; i<len; i++)
465 result[i] = 1.0/(1.0+
CMath::exp(-1.0*result[i]));
479 V += W.transpose()*H;
489 result(i+offset,j) = 1.0/(1.0+
CMath::exp(-1.0*result(i+offset,j)));
500 if (result(i+offset,j) >
max)
501 max = result(i+offset,j);
513 CMath::exp(result(i+offset,j)-max-normalizer);
522 for (int32_t i=0; i<length; i++)
543 result(i+offset,j) =
CMath::random(0.0,1.0) < mean(i+offset,j);
550 result(i+offset,j) = 0;
558 sum += mean(i+offset,j);
561 result(i+offset,j) = 1;
658 SG_ADD((
CSGObject**)&m_visible_state_offsets,
"visible_group_index_offsets",
661 SG_ADD(&m_num_params,
"num_params",
virtual float64_t reconstruction_error(SGMatrix< float64_t > visible, SGMatrix< float64_t > buffer=SGMatrix< float64_t >())
int32_t get_num_features() const
virtual CDenseFeatures< float64_t > * sample_group(int32_t V, int32_t num_gibbs_steps=1, int32_t batch_size=1)
SGMatrix< ST > get_feature_matrix()
static float32_t normal_random(float32_t mean, float32_t std_dev)
virtual void add_visible_group(int32_t num_units, ERBMVisibleUnitType unit_type)
SGVector< float64_t > m_params
float64_t gd_learning_rate
ERBMMonitoringMethod monitoring_method
virtual void mean_visible(SGMatrix< float64_t > hidden, SGMatrix< float64_t > result)
virtual void contrastive_divergence(SGMatrix< float64_t > visible_batch, SGVector< float64_t > gradients)
virtual SGMatrix< float64_t > get_weights(SGVector< float64_t > p=SGVector< float64_t >())
Class SGObject is the base class of all shogun objects.
virtual SGVector< float64_t > get_hidden_bias(SGVector< float64_t > p=SGVector< float64_t >())
virtual int32_t get_num_vectors() const
virtual void initialize_neural_network(float64_t sigma=0.01)
virtual void train(CDenseFeatures< float64_t > *features)
virtual SGVector< float64_t > get_visible_bias(SGVector< float64_t > p=SGVector< float64_t >())
SGMatrix< float64_t > hidden_state
int32_t monitoring_interval
virtual void reset_chain()
CDynamicArray< int32_t > * m_visible_group_types
int32_t m_num_visible_groups
CDynamicArray< int32_t > * m_visible_group_sizes
all of classes and functions are contained in the shogun namespace
virtual void sample_visible(SGMatrix< float64_t > mean, SGMatrix< float64_t > result)
virtual void set_batch_size(int32_t batch_size)
static float64_t exp(float64_t x)
virtual void sample_with_evidence(int32_t E, CDenseFeatures< float64_t > *evidence, int32_t num_gibbs_steps=1)
float64_t gd_learning_rate_decay
static float64_t log(float64_t v)
int32_t gd_mini_batch_size
SGMatrix< float64_t > visible_state
int32_t get_num_elements() const
const T & element(int32_t idx1, int32_t idx2=0, int32_t idx3=0) const
virtual float64_t pseudo_likelihood(SGMatrix< float64_t > visible, SGMatrix< float64_t > buffer=SGMatrix< float64_t >())
Matrix::Scalar max(Matrix m)
virtual void sample_hidden(SGMatrix< float64_t > mean, SGMatrix< float64_t > result)
CDynamicArray< int32_t > * m_visible_state_offsets
virtual void mean_hidden(SGMatrix< float64_t > visible, SGMatrix< float64_t > result)
virtual float64_t free_energy(SGMatrix< float64_t > visible, SGMatrix< float64_t > buffer=SGMatrix< float64_t >())
static int32_t pow(bool x, int32_t n)
virtual void sample(int32_t num_gibbs_steps=1, int32_t batch_size=1)
virtual void free_energy_gradients(SGMatrix< float64_t > visible, SGVector< float64_t > gradients, bool positive_phase=true, SGMatrix< float64_t > hidden_mean_given_visible=SGMatrix< float64_t >())
virtual CDenseFeatures< float64_t > * sample_group_with_evidence(int32_t V, int32_t E, CDenseFeatures< float64_t > *evidence, int32_t num_gibbs_steps=1)