for(int n=0; n<N; n++) { //遍历所有的输入数据样本
// layer input
for(int i=0; i<n_layers; i++) {
if(i == 0) {
prev_layer_input = new int [n_ins]; // 如果是第
一层的话,输入就是数据样本的维度
for(int j=0; j<n_ins; j++)
prev_layer_input[j] = train_X[n][j]; //获取输入数据
} else {
prev_layer_input = new
int[hidden_layer_sizes[i-1]];
for(int j=0; j<hidden_layer_sizes[i-1]; j++)
prev_layer_input[j] = layer_input[j];
}
layer_input = new int[hidden_layer_sizes[i]];
//第 i 层的 sigmoid 层计算出本层的输出,作为下一层的输入
layer_input
sigmoid_layers[i].sample_h_given_v(prev_layer_input,
layer_input);
} // end for iter layer
//一个样本从头扫到尾, 遍历所有的层最后的输出保存在
layer_input 当中
log_layer.train(layer_input, train_Y[n], lr);
//log_layer 是逻辑回归的对象, 用 layer_input 和 label 来做逻辑回归
} // end for iter data
// lr *= 0.95;
}// end for epochs
}
public void predict(int[] x, double[] y) { // 这里一次只处理一个
样本
double[] layer_input = new double[0];
// int prev_layer_input_size;
double[] prev_layer_input = new double[n_ins];
for(int j=0; j<n_ins; j++) prev_layer_input[j] = x[j]; //最
开始的输入是特征 x
double linear_output;
// layer activation 迭代每一层
for(int i=0; i<n_layers; i++) {