├── .gitignore ├── c ├── utils.h ├── HiddenLayer.h ├── DBN.h ├── SdA.h ├── dA.h ├── LogisticRegression.h ├── RBM.h ├── LogisticRegression.c ├── dA.c ├── RBM.c ├── DBN.c └── SdA.c ├── cpp ├── HiddenLayer.h ├── LogisticRegression.h ├── DBN.h ├── SdA.h ├── dA.h ├── utils.cpp ├── RBM.h ├── HiddenLayer.cpp ├── LogisticRegression.cpp ├── dA.cpp ├── RBM.cpp ├── DBN.cpp └── SdA.cpp ├── python ├── utils.py ├── HiddenLayer.py ├── CRBM.py ├── LogisticRegression.py ├── CDBN.py ├── dA.py ├── RBM.py ├── SdA.py └── DBN.py ├── README.md ├── java ├── DBN │ └── src │ │ ├── LogisticRegression.java │ │ ├── HiddenLayer.java │ │ ├── RBM.java │ │ └── DBN.java ├── SdA │ └── src │ │ ├── LogisticRegression.java │ │ ├── HiddenLayer.java │ │ ├── dA.java │ │ └── SdA.java ├── LogisticRegression │ └── src │ │ └── LogisticRegression.java ├── dA │ └── src │ │ └── dA.java └── RBM │ └── src │ └── RBM.java └── scala ├── HiddenLayer.scala ├── LogisticRegression.scala ├── dA.scala ├── RBM.scala ├── DBN.scala └── SdA.scala /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.pyc 3 | *.out 4 | *.o 5 | 6 | *.class 7 | *.classpath 8 | *.settings 9 | .project 10 | .metadata 11 | -------------------------------------------------------------------------------- /c/utils.h: -------------------------------------------------------------------------------- 1 | #ifndef UTILS_H 2 | #define UTILS_H 3 | 4 | double uniform(double, double); 5 | int binomial(int, double); 6 | double sigmoid(double); 7 | 8 | #endif 9 | -------------------------------------------------------------------------------- /cpp/HiddenLayer.h: -------------------------------------------------------------------------------- 1 | class HiddenLayer { 2 | 3 | public: 4 | int N; 5 | int n_in; 6 | int n_out; 7 | double **W; 8 | double *b; 9 | HiddenLayer(int, int, int, double**, double*); 10 | ~HiddenLayer(); 11 | double output(int*, double*, double); 12 | void sample_h_given_v(int*, int*); 13 | }; 14 | -------------------------------------------------------------------------------- /cpp/LogisticRegression.h: -------------------------------------------------------------------------------- 1 | class LogisticRegression { 2 | 3 | public: 4 | int N; // num of inputs 5 | int n_in; 6 | int n_out; 7 | double **W; 8 | double *b; 9 | LogisticRegression(int, int, int); 10 | ~LogisticRegression(); 11 | void train(int*, int*, double); 12 | void softmax(double*); 13 | void predict(int*, double*); 14 | }; 15 | -------------------------------------------------------------------------------- /cpp/DBN.h: -------------------------------------------------------------------------------- 1 | class DBN { 2 | 3 | public: 4 | int N; 5 | int n_ins; 6 | int *hidden_layer_sizes; 7 | int n_outs; 8 | int n_layers; 9 | HiddenLayer **sigmoid_layers; 10 | RBM **rbm_layers; 11 | LogisticRegression *log_layer; 12 | DBN(int, int, int*, int, int); 13 | ~DBN(); 14 | void pretrain(int*, double, int, int); 15 | void finetune(int*, int*, double, int); 16 | void predict(int*, double*); 17 | }; 18 | -------------------------------------------------------------------------------- /cpp/SdA.h: -------------------------------------------------------------------------------- 1 | class SdA { 2 | 3 | public: 4 | int N; 5 | int n_ins; 6 | int *hidden_layer_sizes; 7 | int n_outs; 8 | int n_layers; 9 | HiddenLayer **sigmoid_layers; 10 | dA **dA_layers; 11 | LogisticRegression *log_layer; 12 | SdA(int, int, int*, int, int); 13 | ~SdA(); 14 | void pretrain(int*, double, double, int); 15 | void finetune(int*, int*, double, int); 16 | void predict(int*, double*); 17 | }; 18 | -------------------------------------------------------------------------------- /cpp/dA.h: -------------------------------------------------------------------------------- 1 | class dA { 2 | 3 | public: 4 | int N; 5 | int n_visible; 6 | int n_hidden; 7 | double **W; 8 | double *hbias; 9 | double *vbias; 10 | dA(int, int, int , double**, double*, double*); 11 | ~dA(); 12 | void get_corrupted_input(int*, int*, double); 13 | void get_hidden_values(int*, double*); 14 | void get_reconstructed_input(double*, double*); 15 | void train(int*, double, double); 16 | void reconstruct(int*, double*); 17 | }; 18 | -------------------------------------------------------------------------------- /c/HiddenLayer.h: -------------------------------------------------------------------------------- 1 | #ifndef HIDDENLAYER_H 2 | #define HIDDENLAYER_H 3 | 4 | typedef struct { 5 | int N; 6 | int n_in; 7 | int n_out; 8 | double **W; 9 | double *b; 10 | } HiddenLayer; 11 | 12 | void HiddenLayer__construct(HiddenLayer*, int, int, int, double**, double*); 13 | void HiddenLayer__destruct(HiddenLayer*); 14 | double HiddenLayer_output(HiddenLayer*, int*, double*, double); 15 | void HiddenLayer_sample_h_given_v(HiddenLayer*, int*, int*); 16 | 17 | #endif 18 | -------------------------------------------------------------------------------- /c/DBN.h: -------------------------------------------------------------------------------- 1 | #ifndef DBN_H 2 | #define DBN_H 3 | 4 | typedef struct { 5 | int N; 6 | int n_ins; 7 | int *hidden_layer_sizes; 8 | int n_outs; 9 | int n_layers; 10 | HiddenLayer *sigmoid_layers; 11 | RBM *rbm_layers; 12 | LogisticRegression log_layer; 13 | } DBN; 14 | 15 | void DBN__construct(DBN*, int, int, int*, int, int); 16 | void DBN__destruct(DBN*); 17 | void DBN_pretrain(DBN*, int*, double, int, int); 18 | void DBN_finetune(DBN*, int*, int*, double, int); 19 | void DBN_predict(DBN*, int*, double*); 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /c/SdA.h: -------------------------------------------------------------------------------- 1 | #ifndef SDA_H 2 | #define SDA_H 3 | 4 | typedef struct { 5 | int N; 6 | int n_ins; 7 | int *hidden_layer_sizes; 8 | int n_outs; 9 | int n_layers; 10 | HiddenLayer *sigmoid_layers; 11 | dA *dA_layers; 12 | LogisticRegression log_layer; 13 | } SdA; 14 | 15 | void SdA__construct(SdA*, int, int, int*, int, int); 16 | void SdA__destruct(SdA*); 17 | void SdA_pretrain(SdA*, int*, double, double, int); 18 | void SdA_finetune(SdA*, int*, int*, double, int); 19 | void SdA_predict(SdA*, int*, double*); 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /cpp/utils.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | double uniform(double min, double max) { 6 | return rand() / (RAND_MAX + 1.0) * (max - min) + min; 7 | } 8 | 9 | int binomial(int n, double p) { 10 | if(p < 0 || p > 1) return 0; 11 | 12 | int c = 0; 13 | double r; 14 | 15 | for(int i=0; i