DBN代码注释.docxVIP

  • 42
  • 0
  • 约1.46万字
  • 约 15页
  • 2017-05-27 发布于河南
  • 举报
DBN代码注释

import java.util.Random;publicclass DBN {publicintN;publicintn_ins;publicint[] hidden_layer_sizes;publicintn_outs;publicintn_layers;public HiddenLayer[] sigmoid_layers;public RBM[] rbm_layers;public LogisticRegression log_layer;public Random rng;publicstaticdouble sigmoid(double x) {return 1.0 / (1.0 + Math.pow(Math.E, -x));}//DBN 的构造函数 N 为样本的个数, n-ins 为特征个数, hidden_layer_sizes 为隐藏层的结构, n-outs 为输出维数, n-layers 为隐藏层个数,rng为随机数实例public DBN(int N, int n_ins, int[] hidden_layer_sizes, int n_outs, int n_layers, Random rng) {int input_size;this.N = N; // 赋值样本数目this.n_ins = n_ins; //赋值特征个数this.hidden_layer_sizes = hidden_layer_sizes; //赋值隐藏层结构this.n_outs = n_outs; // 赋值输出维数this.n_layers = n_layers; // 赋值隐藏层数目this.sigmoid_layers = new HiddenLayer[n_layers]; // 声明两个隐藏层this.rbm_layers = new RBM[n_layers]; //声明两个RBM对应每个隐藏层if(rng == null)this.rng = new Random(1234); // 获取一个随机数值elsethis.rng = rng;// construct multi-layer 初始化每个隐藏层for(int i=0; ithis.n_layers; i++) {if(i == 0) {input_size = this.n_ins; //第一层隐藏层的输入为样本的特征的个数} else {input_size = this.hidden_layer_sizes[i-1]; // 后面的隐藏层的输入为上一层隐藏层的输出,也就是上一层的隐藏层节点的个数。}// sigmoid层是用来计算的,rbm是用来调整 w , b , c 的// construct sigmoid_layer 初始化每个隐藏层,初始化做的事情就是给W和b赋随机值this.sigmoid_layers[i] = newHiddenLayer(this.N, input_size, this.hidden_layer_sizes[i], null, null, rng);// construct rbm_layer 初始化玻尔兹曼机,其实也就是初始化,W, b , c 其中,w , b 用的是hiddenlayer的this.rbm_layers[i] = newRBM(this.N, input_size, this.hidden_layer_sizes[i], this.sigmoid_layers[i].W, this.sigmoid_layers[i].b, null, rng);}//在完成每一层的构建之后,构建一个输出的逻辑回归层// layer for output using LogisticRegression,参数为样本个数N,输入为网络结构最后一层的输出数,输出为DBM网络设置的输出维数this.log_layer = newLogisticRegression(this.N, this.hidden_layer_sizes[this.n_layers-1], this.n_outs);}//对DBN网络进行一个预训练,目的是为每一层先构造更好的W和b,先使得网络更好的拟合样本的分布,类似于先把点放在最后值的附近publicvoid pretrain(int[][] train_X, double lr, int k, int epochs) {//输入训练样本,学习率lr, CD-k =1 , epochs=1000int[] layer_input = null ;int prev_layer_input_size;int[] prev_layer_input;for(i

文档评论(0)

1亿VIP精品文档

相关文档