【deep learning学习笔记】注释yusugomori的RBM代码 --- 头文件


百度了半天yusugomori,也不知道他是谁。不过这位老兄写了deep learning的代码,包括RBM、逻辑回归、DBN、autoencoder等,实现语言包括c、c++、java、python等。是学习的好材料。代码下载地址:https://github.com/yusugomori/DeepLearning。不过这位老兄不喜欢写注释,而且这些模型的原理、公式什么的,不了解的话就看不懂代码。我从给他写注释开始,边看资料、边理解它的代码、边给他写上注释。

工具包中RBM的实现包含了两个文件,RBM.h和RBM.cpp。RBM.h添加注释后,如下:

[cpp]  view plain copy
  1. class RBM   
  2. {  
  3. public:  
  4.     // the number of training sample   
  5.     int N;  
  6.     // the number of visiable node  
  7.     int n_visible;  
  8.     // the number of hidden node  
  9.     int n_hidden;  
  10.     // the weight connecting the visiable node and the hidden node  
  11.     double **W;  
  12.     // the bias of hidden node  
  13.     double *hbias;  
  14.     // the bias of visiable node  
  15.     double *vbias;  
  16.   
  17. public:  
  18.     // construct the RBM by input parameters  
  19.     RBM (int,       // N  
  20.         int,        // n_visible  
  21.         int,        // n_hidden  
  22.         double**,   // W  
  23.         double*,    // hbias  
  24.         double*     // vbias  
  25.         );  
  26.     // destructor, release all the memory of parameters  
  27.     ~RBM ();  
  28.     // CD-k algorithm to train RBM  
  29.      void contrastive_divergence (int*, // one input sample  
  30.          double,                        // the learning rate  
  31.          int                            // the k of CD-k, it is usually 1  
  32.          );  
  33.   
  34.     // these the functions of Gibbs sample   
  35.   
  36.     // sample the hidden node given the visiable node, 'sample' means calculating  
  37.     // 1. the output probability of the hidden node given the input of visiable node  
  38.     // and the weight of current RBM; 2. the 0-1 state of hidden node by a binomial  
  39.     // distribution given the calculated output probability of this hidden node  
  40.     void sample_h_given_v (int*,        // one input sample from visiable nodes -- input  
  41.         double*,                        // the output probability of hidden nodes -- output  
  42.         int*                            // the calculated 0-1 state of hidden node -- output  
  43.         );  
  44.     // sample the visiable node given the hidden node, 'sample' means calculating  
  45.     // 1. the output probability of the visiable node given the input of hidden node  
  46.     // and the weight of current RBM; 2. the 0-1 state of visiable node by a binomial  
  47.     // distribution given the calculated output probability of this visiable node  
  48.     void sample_v_given_h (int*,        // one input sample from hidden nodes -- input  
  49.         double*,                        // the output probability of visiable nodes -- output  
  50.         int*                            // the calculated 0-1 state of visiable node -- output  
  51.         );  
  52.     // 'propup' -- probability up. It's called by the 'sample_x_given_x' function and the reconstruct funciton  
  53.     //  To calculate the probability in 'upper' node given the input from 'lower' node in RBM  
  54.     // note: what is the 'up' and 'down'? the visiable node is below (down) the hidden node.  
  55.     // 'probability up' means calculating the probability of hidden node given the visiable node  
  56.     // return value: the output probability of the hidden node given the input of visiable node  
  57.     // and the weight of current RBM  
  58.     // the probability is : p (hi|v) = sigmod ( sum_j(vj * wij) + bi)  
  59.     double propup (int*,                // one input sample from visiable node -- input  
  60.         double*,                        // the weight W connecting one hidden node to all visible node -- input  
  61.         double                          // the bias for this hidden node -- input  
  62.         );  
  63.     // 'propdown' -- probability down. It's called by the 'sample_x_given_x' function and the reconstruct funciton  
  64.     //  To calculate the probability in 'lower' node given the input from 'upper' node in RBM  
  65.     // note: what is the 'up' and 'down'? the visiable node is below (down) the hidden node.  
  66.     // 'probability down' means calculating the probability of visiable node given the hidden node  
  67.     // return value: the output probability of the visiable node given the input of hidden node  
  68.     // and the weight of current RBM  
  69.     // the probability is : p (vi|h) = sigmod ( sum_j(hj * wij) + ci)  
  70.     double propdown (int*,              // one input sample from hidden node -- input  
  71.         int,                            // the index of visiable node in the W matrix -- input  
  72.         double                          // the bias for this visible node -- input  
  73.         );  
  74.     // 'gibbs_hvh' -- gibbs sample firstly from hidden node to visible node, then sample  
  75.     // from visiable node to hidden node. It is called by contrastive_divergence.  
  76.     void gibbs_hvh (int*,               // one input sample from hidden node, h0 -- input  
  77.         double*,                        // the output probability of visiable nodes -- output  
  78.         int*,                           // the calculated 0-1 state of visiable node -- output  
  79.         double*,                        // the output probability of reconstructed hidden node  h1 -- output  
  80.         int*                            // the calculated 0-1 state of reconstructed hidden node h1 -- output  
  81.         );  
  82.     // reconstruct the input visiable node by the trained RBM (so as to varify the RBM model)  
  83.     void reconstruct (int*,             // one input sample from visiable node  
  84.         double*                         // the reconstructed output by RBM model  
  85.         );  
  86. };  

主要添加了函数说明、参数说明、计算说明、调用关系等。

你可能感兴趣的:(【deep learning学习笔记】注释yusugomori的RBM代码 --- 头文件)