2015年6月9日星期二

nplm代码学习与使用 (3)

模型的训练. model类 (model.h)中定义了如下的成员变量
    Input_word_embeddings input_layer;
    Linear_layer first_hidden_linear;
    Activation_function first_hidden_activation;
    Linear_layer second_hidden_linear;
    Activation_function second_hidden_activation;
    Output_word_embeddings output_layer;
    Matrix<double,Dynamic,Dynamic,Eigen::RowMajor> output_embedding_matrix,
      input_embedding_matrix,
      input_and_output_embedding_matrix;
    
    activation_function_type activation_function;
    int ngram_size, input_vocab_size, output_vocab_size, input_embedding_dimension, num_hidden, output_embedding_dimension;
    bool premultiplied;
model定义了两个构造方法,在trainNeuralNetWork.cpp中调用的是这个:
    model() : ngram_size(1), 
            premultiplied(false),
            activation_function(Rectifier),
            output_embedding_matrix(Matrix<double,Dynamic,Dynamic,Eigen::RowMajor>()),
            input_embedding_matrix(Matrix<double,Dynamic,Dynamic,Eigen::RowMajor>())
        {
          output_layer.set_W(&output_embedding_matrix);
          input_layer.set_W(&input_embedding_matrix);
        }
接着会调用下面代码对其中一些成员变量初始化.

    nn.resize(myParam.ngram_size, myParam.input_vocab_size,
        myParam.output_vocab_size, myParam.input_embedding_dimension,
        myParam.num_hidden, myParam.output_embedding_dimension);

    nn.initialize(rng, myParam.init_normal, myParam.init_range,
        -log(myParam.output_vocab_size), myParam.parameter_update,
        myParam.adagrad_epsilon);
    nn.set_activation_function(
        string_to_activation_function(myParam.activation_function));
其中resize方法

没有评论: