Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Compile with
- g++ -std=c++11 Neural_network_using_mlpack.cpp -l mlpack -l armadillo -l boost_serialization -l boost_program_options
- where Neural_network_using_mlpack.cpp is the name of this cpp file
- */
- #include <mlpack/core.hpp>
- #include <mlpack/methods/ann/activation_functions/logistic_function.hpp>
- #include <mlpack/methods/ann/activation_functions/tanh_function.hpp>
- #include <mlpack/methods/ann/init_rules/random_init.hpp>
- #include <mlpack/methods/ann/layer/bias_layer.hpp>
- #include <mlpack/methods/ann/layer/linear_layer.hpp>
- #include <mlpack/methods/ann/layer/base_layer.hpp>
- #include <mlpack/methods/ann/layer/dropout_layer.hpp>
- #include <mlpack/methods/ann/layer/binary_classification_layer.hpp>
- #include <mlpack/methods/ann/ffn.hpp>
- #include <mlpack/methods/ann/performance_functions/mse_function.hpp>
- #include <mlpack/core/optimizers/rmsprop/rmsprop.hpp>
- using namespace mlpack;
- using namespace mlpack::ann;
- using namespace mlpack::optimization;
- template<
- typename PerformanceFunction,
- typename OutputLayerType,
- typename PerformanceFunctionType,
- typename MatType = arma::mat
- >
- void BuildNetwork(MatType& trainData,
- MatType& trainLabels,
- MatType& testData,
- MatType& testLabels,
- const size_t hiddenLayerSize,
- const size_t maxEpochs,
- const double classificationErrorThreshold)
- {
- LinearLayer<> inputLayer(trainData.n_rows, hiddenLayerSize);
- BiasLayer<> inputBiasLayer(hiddenLayerSize);
- BaseLayer<PerformanceFunction> inputBaseLayer;
- LinearLayer<> hiddenLayer1(hiddenLayerSize, trainLabels.n_rows);
- BiasLayer<> hiddenBiasLayer1(trainLabels.n_rows);
- BaseLayer<PerformanceFunction> outputLayer;
- OutputLayerType classOutputLayer;
- auto modules = std::tie(inputLayer, inputBiasLayer, inputBaseLayer,
- hiddenLayer1, hiddenBiasLayer1, outputLayer);
- FFN<decltype(modules), decltype(classOutputLayer), RandomInitialization,
- PerformanceFunctionType> net(modules, classOutputLayer);
- RMSprop<decltype(net)> opt(net, 0.01, 0.88, 1e-8,
- maxEpochs * trainData.n_cols, 1e-18);
- std::cout<<"Success"<<std::endl;
- net.Train(trainData, trainLabels, opt);
- MatType prediction;
- net.Predict(testData, prediction);
- size_t error = 0;
- for (size_t i = 0; i < testData.n_cols; i++)
- {
- if (arma::sum(arma::sum(
- arma::abs(prediction.col(i) - testLabels.col(i)))) == 0)
- {
- error++;
- }
- }
- double classificationError = 1 - double(error) / testData.n_cols;
- }
- int main()
- {
- arma::mat dataset;
- data::Load("thyroid_train.csv", dataset, true);
- arma::mat trainData = dataset.submat(0, 0, dataset.n_rows - 4,
- dataset.n_cols - 1);
- arma::mat trainLabels = dataset.submat(dataset.n_rows - 3, 0,
- dataset.n_rows - 1, dataset.n_cols - 1);
- data::Load("thyroid_test.csv", dataset, true);
- arma::mat testData = dataset.submat(0, 0, dataset.n_rows - 4,
- dataset.n_cols - 1);
- arma::mat testLabels = dataset.submat(dataset.n_rows - 3, 0,
- dataset.n_rows - 1, dataset.n_cols - 1);
- BuildNetwork<LogisticFunction,
- BinaryClassificationLayer,
- MeanSquaredErrorFunction>
- (trainData, trainLabels, testData, testLabels, 8, 200, 0.1);
- return 0;
- }
Add Comment
Please, Sign In to add comment