SDA的头文件。
数据方面,HiddenLayer和dA共享同样的网络参数(只是参数关联的函数方法不同而已)。虽然HiddenLayer和dA都声明称二级指针,不过其指向的只是一维的数据,只不过每一个数据用指针来指向而已。
接口方面,非常简洁,就三个:预训练、参数微调、模型预测。
代码如下:
class SdA
{
public:
int N; // the number of training samples
int n_ins; // the number of nodes in input layer
int *hidden_layer_sizes; // the number of nodes in each hidden layer
int n_outs; // the number of nodes in output layer
int n_layers; // the number of hidden layers
HiddenLayer **sigmoid_layers; // the pointer vector for hidden layers
dA **dA_layers; // the same as sigmoid_layers, but different algorithms
LogisticRegression *log_layer; // the output logistic regression layer
SdA (
int, // N
int, // n_ins
int*, // hidden_layer_sizes
int, // n_outs
int // n_layers
);
~SdA();
// pretrain the network layer by layer in denosing auto-encoder
void pretrain (
int*, // input 0-1 vector ( N * n_ins )
double, // the learning rate
double, // corruption_level for denoising
int // the training epoch
);
// finetune the network by the output labels
void finetune (
int*, // input 0-1 vector ( N * n_ins )
int*, // the labels for the input samples
double, // the learning rate
int // the training epoch
);
void predict (
int*, // input 0-1 vector ( 1 * n_ins )
double* // the output from logestic regression layer, which is the prediction of networks
);
};