From 12be7ab4876f77fecfab903df70791623219b3da Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Tue, 3 Jul 2018 12:06:23 +0100 Subject: COMPMID-1310: Create graph validation executables. Change-Id: I9e0b57b1b83fe5a95777cdaeddba6ecef650bafc Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/138697 Reviewed-by: Anthony Barbier Tested-by: Jenkins --- examples/graph_lenet.cpp | 86 +++++++++++++++++++++--------------------------- 1 file changed, 37 insertions(+), 49 deletions(-) (limited to 'examples/graph_lenet.cpp') diff --git a/examples/graph_lenet.cpp b/examples/graph_lenet.cpp index 32c75827d3..f90892aeee 100644 --- a/examples/graph_lenet.cpp +++ b/examples/graph_lenet.cpp @@ -22,13 +22,11 @@ * SOFTWARE. */ #include "arm_compute/graph.h" - #include "support/ToolchainSupport.h" +#include "utils/CommonGraphOptions.h" #include "utils/GraphUtils.h" #include "utils/Utils.h" -#include - using namespace arm_compute::utils; using namespace arm_compute::graph::frontend; using namespace arm_compute::graph_utils; @@ -41,55 +39,39 @@ using namespace arm_compute::graph_utils; class GraphLenetExample : public Example { public: - void do_setup(int argc, char **argv) override + GraphLenetExample() + : cmd_parser(), common_opts(cmd_parser), common_params(), graph(0, "LeNet") { - std::string data_path; /** Path to the trainable data */ - unsigned int batches = 4; /** Number of batches */ - - // Set target. 0 (NEON), 1 (OpenCL), 2 (OpenCL with Tuner). By default it is NEON - const int target = argc > 1 ? std::strtol(argv[1], nullptr, 10) : 0; - Target target_hint = set_target_hint(target); + } + bool do_setup(int argc, char **argv) override + { + // Parse arguments + cmd_parser.parse(argc, argv); - FastMathHint fast_math_hint = FastMathHint::DISABLED; + // Consume common parameters + common_params = consume_common_graph_parameters(common_opts); - // Parse arguments - if(argc < 2) + // Return when help menu is requested + if(common_params.help) { - // Print help - std::cout << "Usage: " << argv[0] << " [target] [path_to_data] [batches] [fast_math_hint]\n\n"; - std::cout << "No data folder provided: using random values\n\n"; - } - else if(argc == 2) - { - std::cout << "Usage: " << argv[0] << " " << argv[1] << " [path_to_data] [batches] [fast_math_hint]\n\n"; - std::cout << "No data folder provided: using random values\n\n"; - } - else if(argc == 3) - { - //Do something with argv[1] - data_path = argv[2]; - std::cout << "Usage: " << argv[0] << " [path_to_data] [batches] [fast_math_hint]\n\n"; - std::cout << "No number of batches where specified, thus will use the default : " << batches << "\n\n"; - } - else if(argc == 4) - { - data_path = argv[2]; - batches = std::strtol(argv[3], nullptr, 0); - std::cout << "Usage: " << argv[0] << " " << argv[1] << " " << argv[2] << " " << argv[3] << " [fast_math_hint]\n\n"; - std::cout << "No fast math info provided: disabling fast math\n\n"; - } - else - { - //Do something with argv[1] and argv[2] - data_path = argv[2]; - batches = std::strtol(argv[3], nullptr, 0); - fast_math_hint = (std::strtol(argv[4], nullptr, 1) == 0) ? FastMathHint::DISABLED : FastMathHint::ENABLED; + cmd_parser.print_help(argv[0]); + return false; } + // Checks + ARM_COMPUTE_ERROR_ON_MSG(arm_compute::is_data_type_quantized_asymmetric(common_params.data_type), "Unsupported data type!"); + + // Print parameter values + std::cout << common_params << std::endl; + + // Get trainable parameters data path + std::string data_path = common_params.data_path; + unsigned int batches = 4; /** Number of batches */ + //conv1 << pool1 << conv2 << pool2 << fc1 << act1 << fc2 << smx - graph << target_hint - << fast_math_hint - << InputLayer(TensorDescriptor(TensorShape(28U, 28U, 1U, batches), DataType::F32), get_input_accessor("")) + graph << common_params.target + << common_params.fast_math_hint + << InputLayer(TensorDescriptor(TensorShape(28U, 28U, 1U, batches), common_params.data_type), get_input_accessor(common_params)) << ConvolutionLayer( 5U, 5U, 20U, get_weights_accessor(data_path, "/cnn_data/lenet_model/conv1_w.npy"), @@ -116,12 +98,15 @@ public: get_weights_accessor(data_path, "/cnn_data/lenet_model/ip2_b.npy")) .set_name("ip2") << SoftmaxLayer().set_name("prob") - << OutputLayer(get_output_accessor("")); + << OutputLayer(get_output_accessor(common_params)); // Finalize graph GraphConfig config; - config.use_tuner = (target == 2); - graph.finalize(target_hint, config); + config.num_threads = common_params.threads; + config.use_tuner = common_params.enable_tuner; + graph.finalize(common_params.target, config); + + return true; } void do_run() override { @@ -130,7 +115,10 @@ public: } private: - Stream graph{ 0, "LeNet" }; + CommandLineParser cmd_parser; + CommonGraphOptions common_opts; + CommonGraphParams common_params; + Stream graph; }; /** Main program for LeNet -- cgit v1.2.1