Untitled

                Never    
C++
       
/*! \fn Eigen::MatrixXf layer::set_weights_convolutional(Eigen::MatrixXf filter_vector, bool is_backprop_weights)
    \brief Create a matrix of the filters.
    \param depth indicates which filter from the filter bank is used for convolution
    \param is_backprop_weights tells if the function should create the filter matrix for computing forwardpass and backpropagation of the inputs (bool is_backprop_weights = false) or the bakcpropagation of the weights (bool is_backprop_weights = true)
*/
Eigen::MatrixXf layer::set_weights_convolutional(Eigen::MatrixXf filter_input_vector, bool is_backprop_weights)
{
    int output_rows = (input_rows + 2 * padding_size + stride - filter_rows) / stride;
    int output_cols = (input_cols + 2 * padding_size + stride - filter_cols) / stride;
    Eigen::MatrixXf filter_vector;
    filter_vector.resize(input_rows, input_cols + 2 * padding_size);
    for(int i = 0; i < weights.rows(); i++)
        for(int j = 0; j < weights.cols(); j++)
        {
            filter_vector(i, j) = filter_input_vector(i, j);
        }
    filter_vector.resize(input_rows*(input_cols + 2 * padding_size),1);
    Eigen::MatrixXf filter_matrix;
    filter_matrix.resize(output_rows*output_cols, input_rows*input_cols);
    int start = int((input_cols + 2 * padding_size) * padding_size + padding_size);
    int start_index = start;
    int stop_after = int(input_cols) - 1;
    for(int i = 0; i < output_rows * output_cols - 1; i++)
    {
        if(start_index < 0)
            start_index += input_rows * input_cols;
        for(int j = 0; j < input_rows; j++)
        {
            int current_index = start_index + int(j*(input_cols + 2 * padding_size)) ;
            for(int x = int(j * input_cols); x < i + stop_after; i++)
            {
                if(is_backprop_weights)
                    filter_matrix(i,x)=1;
                else
                    filter_matrix(i,x)=filter_vector(current_index++);
            }
        }
        start_index -= 1;
        if(i % output_rows == 0)
            start_index = start - int((input_cols+2*padding_size)*i/ output_rows);
    }

    // now do the big matrix
    return filter_matrix;
}

Raw Text