152 SG_INFO(
"Pre-training RBM %i\n",k);
154 SG_INFO(
"Finished pre-training RBM %i\n",k);
166 rbm.initialize_neural_network(
m_sigma);
185 rbm.train(transformed_features);
199 for (int32_t i=0; i<dbn_b.
vlen; i++)
202 for (int32_t i=0; i<dbn_c.
vlen; i++)
211 REQUIRE(features != NULL,
"Invalid (NULL) feature pointer\n");
213 "Number of features (%i) must match the DBN's number of visible units "
218 int32_t training_set_size = inputs.
num_cols;
223 for (int32_t i=0; i<rec_params.
vlen; i++)
229 rec_gradients.
zero();
233 param_updates.
zero();
234 rec_param_updates.
zero();
249 if (m_num_layers > 2)
254 top_rbm.initialize_neural_network();
257 top_rbm.get_num_parameters(),
false);
260 top_rbm.cd_persistent =
false;
276 inputs.num_rows, gd_mini_batch_size,
false);
284 wake_sleep(inputs_batch, &top_rbm, sleep_states, wake_states,
285 psleep_states, pwake_states,
m_params,
286 rec_params, gradients, rec_gradients);
294 rec_param_updates[k] =
gd_momentum*rec_param_updates[k]
295 -alpha*rec_gradients[k];
296 rec_params[k] -= alpha*rec_gradients[k];
304 error +=
CMath::pow(reconstruction[k]-inputs_batch[k],2);
308 SG_INFO(
"Epoch %i: reconstruction Error = %f\n",i, error);
322 for (int32_t h=1; h<=i; h++)
326 transformed_feature_matrix = m;
333 int32_t num_gibbs_steps, int32_t batch_size)
337 for (int32_t i=0; i<num_gibbs_steps; i++)
369 if (output_layer!=NULL)
382 for (int32_t j=0; j<b.
vlen; j++)
408 Out += W.transpose()*In;
414 for (int32_t i=0; i<len; i++)
415 result[i] = 1.0/(1.0+
CMath::exp(-1.0*result[i]));
430 Out(k,j) =
CMath::exp(Out(k,j)-max-normalizer);
434 if (sample_states && index>0)
437 for (int32_t i=0; i<len; i++)
462 for (int32_t i=0; i<len; i++)
463 result[i] = 1.0/(1.0+
CMath::exp(-1.0*result[i]));
465 if (sample_states && index>0)
467 for (int32_t i=0; i<len; i++)
485 wake_states[0][i] = data[i];
488 up_step(i, rec_params, wake_states[i-1], wake_states[i]);
498 for (int32_t i=m_num_layers-3; i>=0; i--)
499 down_step(i, gen_params, sleep_states[i+1], sleep_states[i]);
502 for (int32_t i=1; i<m_num_layers-1; i++)
503 up_step(i, rec_params, sleep_states[i-1], psleep_states[i]);
504 for (int32_t i=0; i<m_num_layers-2; i++)
505 down_step(i, gen_params, wake_states[i+1], pwake_states[i]);
508 for (int32_t i=0; i<m_num_layers-2; i++)
510 EMatrix wake_i(wake_states[i].matrix,
511 wake_states[i].num_rows, wake_states[i].num_cols);
512 EMatrix wake_i_plus_one(wake_states[i+1].matrix,
513 wake_states[i+1].num_rows, wake_states[i+1].num_cols);
514 EMatrix pwake_i(pwake_states[i].matrix,
515 pwake_states[i].num_rows, pwake_states[i].num_cols);
517 EMatrix WG_gen(
get_weights(i,gen_gradients).matrix,
521 pwake_i = pwake_i - wake_i;
523 WG_gen = wake_i_plus_one*pwake_i.transpose()/
m_batch_size;
527 for (int32_t i=1; i<m_num_layers-1; i++)
529 EMatrix sleep_i(sleep_states[i].matrix,
530 sleep_states[i].num_rows, sleep_states[i].num_cols);
531 EMatrix psleep_i(psleep_states[i].matrix,
532 psleep_states[i].num_rows, psleep_states[i].num_cols);
533 EMatrix sleep_i_minus_one(sleep_states[i-1].matrix,
534 sleep_states[i-1].num_rows, sleep_states[i-1].num_cols);
536 EMatrix WG_rec(
get_weights(i-1,rec_gradients).matrix,
540 psleep_i = psleep_i - sleep_i;
542 WG_rec = psleep_i*sleep_i_minus_one.transpose()/
m_batch_size;
568 void CDeepBeliefNetwork::init()
virtual void reset_chain()
A Restricted Boltzmann Machine.
virtual void wake_sleep(SGMatrix< float64_t > data, CRBM *top_rbm, SGMatrixList< float64_t > sleep_states, SGMatrixList< float64_t > wake_states, SGMatrixList< float64_t > psleep_states, SGMatrixList< float64_t > pwake_states, SGVector< float64_t > gen_params, SGVector< float64_t > rec_params, SGVector< float64_t > gen_gradients, SGVector< float64_t > rec_gradients)
SGVector< int32_t > m_index_offsets
virtual void train(CDenseFeatures< float64_t > *features)
virtual CDenseFeatures< float64_t > * transform(CDenseFeatures< float64_t > *features, int32_t i=-1)
virtual int32_t get_num_parameters()
float64_t gd_learning_rate_decay
SGMatrixList< float64_t > m_states
SGVector< int32_t > pt_gd_mini_batch_size
virtual void initialize_neural_network(float64_t sigma=0.01f)
SGVector< int32_t > m_bias_index_offsets
int32_t get_num_features() const
float64_t gd_learning_rate
SGMatrix< ST > get_feature_matrix()
static float32_t normal_random(float32_t mean, float32_t std_dev)
SGVector< float64_t > m_params
virtual void add_visible_group(int32_t num_units, ERBMVisibleUnitType unit_type)
CDynamicArray< int32_t > * m_layer_sizes
A generic multi-layer neural network.
virtual void pre_train(CDenseFeatures< float64_t > *features)
SGVector< float64_t > pt_gd_momentum
virtual void down_step(int32_t index, SGVector< float64_t > params, SGMatrix< float64_t > input, SGMatrix< float64_t > result, bool sample_states=true)
Base class for neural network layers.
SGVector< int32_t > pt_monitoring_interval
virtual void quick_connect()
ERBMVisibleUnitType m_visible_units_type
SGVector< int32_t > m_weights_index_offsets
int32_t monitoring_interval
virtual void contrastive_divergence(SGMatrix< float64_t > visible_batch, SGVector< float64_t > gradients)
virtual void up_step(int32_t index, SGVector< float64_t > params, SGMatrix< float64_t > input, SGMatrix< float64_t > result, bool sample_states=true)
SGVector< float64_t > m_params
Class SGObject is the base class of all shogun objects.
void set_matrix(index_t index, const SGMatrix< T > matrix)
virtual int32_t get_num_vectors() const
SGVector< float64_t > pt_gd_learning_rate
virtual void add_hidden_layer(int32_t num_units)
virtual void set_batch_size(int32_t batch_size)
SGVector< float64_t > pt_gd_learning_rate_decay
SGVector< bool > pt_cd_persistent
Dynamic array class for CSGObject pointers that creates an array that can be used like a list or an a...
SGVector< float64_t > pt_l1_coefficient
SGVector< int32_t > pt_monitoring_method
SGVector< float64_t > pt_l2_coefficient
Neural layer with linear neurons, with a logistic activation function. can be used as a hidden layer ...
all of classes and functions are contained in the shogun namespace
virtual CNeuralNetwork * convert_to_neural_network(CNeuralLayer *output_layer=NULL, float64_t sigma=0.01)
virtual ~CDeepBeliefNetwork()
static float64_t exp(float64_t x)
static float64_t log(float64_t v)
SGMatrix< float64_t > visible_state
virtual CDenseFeatures< float64_t > * sample(int32_t num_gibbs_steps=1, int32_t batch_size=1)
const T & element(int32_t idx1, int32_t idx2=0, int32_t idx3=0) const
SGVector< bool > pt_cd_sample_visible
virtual SGMatrix< float64_t > get_weights(int32_t index, SGVector< float64_t > p=SGVector< float64_t >())
Matrix::Scalar max(Matrix m)
virtual void initialize_neural_network(float64_t sigma=0.01)
int32_t gd_mini_batch_size
SGVector< int32_t > pt_max_num_epochs
static int32_t pow(bool x, int32_t n)
void set_const(T const_elem)
virtual SGVector< float64_t > get_biases(int32_t index, SGVector< float64_t > p=SGVector< float64_t >())
bool append_element(CSGObject *e)
SGVector< int32_t > pt_cd_num_steps