From 9e4ee992f90e7da6cf52fb2664f7aaeffa8ccb62 Mon Sep 17 00:00:00 2001 From: Amol Lele <19983848+leleamol@users.noreply.github.com> Date: Tue, 2 Apr 2019 16:23:54 -0700 Subject: [PATCH] [MXNET-1357] Fix the cpp-examples to add exception handling (#14441) * Adding exception handling to the cpp-package examples. * Updating exception handling to catch dmlc::error. * Removed the catch all exception. --- cpp-package/example/alexnet.cpp | 2 ++ cpp-package/example/charRNN.cpp | 3 +++ cpp-package/example/googlenet.cpp | 2 ++ cpp-package/example/inception_bn.cpp | 2 ++ cpp-package/example/lenet.cpp | 3 +++ cpp-package/example/lenet_with_mxdataiter.cpp | 2 ++ cpp-package/example/mlp.cpp | 3 +++ cpp-package/example/mlp_cpu.cpp | 2 ++ cpp-package/example/mlp_csv.cpp | 2 ++ cpp-package/example/mlp_gpu.cpp | 2 ++ cpp-package/example/resnet.cpp | 2 ++ cpp-package/example/test_score.cpp | 4 +++- cpp-package/example/utils.h | 9 +++++++++ 13 files changed, 37 insertions(+), 1 deletion(-) diff --git a/cpp-package/example/alexnet.cpp b/cpp-package/example/alexnet.cpp index 2b2d7b4ac222..21029da4678b 100644 --- a/cpp-package/example/alexnet.cpp +++ b/cpp-package/example/alexnet.cpp @@ -228,6 +228,7 @@ int main(int argc, char const *argv[]) { } #endif + TRY /*net symbol*/ auto Net = AlexnetSymbol(10); @@ -352,5 +353,6 @@ int main(int argc, char const *argv[]) { delete exec; delete opt; MXNotifyShutdown(); + CATCH return 0; } diff --git a/cpp-package/example/charRNN.cpp b/cpp-package/example/charRNN.cpp index 8951580067a8..ac5faa47b58c 100644 --- a/cpp-package/example/charRNN.cpp +++ b/cpp-package/example/charRNN.cpp @@ -42,6 +42,7 @@ #include #include #include "mxnet-cpp/MxNetCpp.h" +#include "utils.h" using namespace mxnet::cpp; @@ -721,6 +722,7 @@ int main(int argc, char** argv) { TIME_MAJOR = task.find("TimeMajor") != std::string::npos; std::cout << "use BuiltIn cuDNN RNN: " << builtIn << std::endl << "use data as TimeMajor: " << TIME_MAJOR << std::endl; + TRY if (task.find("train") == 0) { std::cout << "train batch size: " << argv[3] << std::endl << "train max epoch: " << argv[4] << std::endl; @@ -746,5 +748,6 @@ int main(int argc, char** argv) { } MXNotifyShutdown(); + CATCH return 0; } diff --git a/cpp-package/example/googlenet.cpp b/cpp-package/example/googlenet.cpp index 26ba51027db6..9cf1834cf22c 100644 --- a/cpp-package/example/googlenet.cpp +++ b/cpp-package/example/googlenet.cpp @@ -124,6 +124,7 @@ int main(int argc, char const *argv[]) { ctx = Context::cpu();; #endif + TRY auto googlenet = GoogleNetSymbol(10); std::map args_map; std::map aux_map; @@ -192,5 +193,6 @@ int main(int argc, char const *argv[]) { delete exec; delete opt; MXNotifyShutdown(); + CATCH return 0; } diff --git a/cpp-package/example/inception_bn.cpp b/cpp-package/example/inception_bn.cpp index a29ef2df7e8c..caf858a64177 100644 --- a/cpp-package/example/inception_bn.cpp +++ b/cpp-package/example/inception_bn.cpp @@ -172,6 +172,7 @@ int main(int argc, char const *argv[]) { } #endif + TRY auto inception_bn_net = InceptionSymbol(10); std::map args_map; std::map aux_map; @@ -255,5 +256,6 @@ int main(int argc, char const *argv[]) { delete exec; delete opt; MXNotifyShutdown(); + CATCH return 0; } diff --git a/cpp-package/example/lenet.cpp b/cpp-package/example/lenet.cpp index 42594548130a..a52efd8fed40 100644 --- a/cpp-package/example/lenet.cpp +++ b/cpp-package/example/lenet.cpp @@ -25,6 +25,7 @@ #include #include #include "mxnet-cpp/MxNetCpp.h" +#include "utils.h" using namespace mxnet::cpp; @@ -257,8 +258,10 @@ class Lenet { }; int main(int argc, char const *argv[]) { + TRY Lenet lenet; lenet.Run(argc > 1 ? strtol(argv[1], NULL, 10) : 100000); MXNotifyShutdown(); + CATCH return 0; } diff --git a/cpp-package/example/lenet_with_mxdataiter.cpp b/cpp-package/example/lenet_with_mxdataiter.cpp index fac624bd8cb5..69067d549380 100644 --- a/cpp-package/example/lenet_with_mxdataiter.cpp +++ b/cpp-package/example/lenet_with_mxdataiter.cpp @@ -94,6 +94,7 @@ int main(int argc, char const *argv[]) { } #endif + TRY auto lenet = LenetSymbol(); std::map args_map; @@ -197,5 +198,6 @@ int main(int argc, char const *argv[]) { delete exec; delete opt; MXNotifyShutdown(); + CATCH return 0; } diff --git a/cpp-package/example/mlp.cpp b/cpp-package/example/mlp.cpp index c3760fd3c846..ee09bf8da3f8 100644 --- a/cpp-package/example/mlp.cpp +++ b/cpp-package/example/mlp.cpp @@ -24,6 +24,7 @@ #include #include #include "mxnet-cpp/MxNetCpp.h" +#include "utils.h" using namespace mxnet::cpp; @@ -173,7 +174,9 @@ void MLP(int max_epoch) { int main(int argc, char** argv) { int max_epoch = argc > 1 ? strtol(argv[1], NULL, 10) : 15000; + TRY MLP(max_epoch); MXNotifyShutdown(); + CATCH return 0; } diff --git a/cpp-package/example/mlp_cpu.cpp b/cpp-package/example/mlp_cpu.cpp index 5d46d40e421f..7ea6946dd8c2 100644 --- a/cpp-package/example/mlp_cpu.cpp +++ b/cpp-package/example/mlp_cpu.cpp @@ -72,6 +72,7 @@ int main(int argc, char** argv) { return 1; } + TRY auto net = mlp(layers); Context ctx = Context::cpu(); // Use CPU for training @@ -141,5 +142,6 @@ int main(int argc, char** argv) { delete exec; delete opt; MXNotifyShutdown(); + CATCH return 0; } diff --git a/cpp-package/example/mlp_csv.cpp b/cpp-package/example/mlp_csv.cpp index f12b7c17133d..0d9103783a79 100644 --- a/cpp-package/example/mlp_csv.cpp +++ b/cpp-package/example/mlp_csv.cpp @@ -156,6 +156,7 @@ int main(int argc, char** argv) { .SetParam("shuffle", 0) .CreateDataIter(); + TRY auto net = mlp(hidden_units); Context ctx = Context::cpu(); @@ -269,5 +270,6 @@ int main(int argc, char** argv) { delete exec; delete opt; MXNotifyShutdown(); + CATCH return 0; } diff --git a/cpp-package/example/mlp_gpu.cpp b/cpp-package/example/mlp_gpu.cpp index f6060209a51e..5265de79d976 100644 --- a/cpp-package/example/mlp_gpu.cpp +++ b/cpp-package/example/mlp_gpu.cpp @@ -72,6 +72,7 @@ int main(int argc, char** argv) { return 1; } + TRY auto net = mlp(layers); Context ctx = Context::gpu(); // Use GPU for training @@ -157,5 +158,6 @@ int main(int argc, char** argv) { delete exec; delete opt; MXNotifyShutdown(); + CATCH return 0; } diff --git a/cpp-package/example/resnet.cpp b/cpp-package/example/resnet.cpp index 29071bd72ee1..f59f60679544 100644 --- a/cpp-package/example/resnet.cpp +++ b/cpp-package/example/resnet.cpp @@ -172,6 +172,7 @@ int main(int argc, char const *argv[]) { float learning_rate = 1e-4; float weight_decay = 1e-4; + TRY auto resnet = ResNetSymbol(10); std::map args_map; std::map aux_map; @@ -277,5 +278,6 @@ int main(int argc, char const *argv[]) { delete exec; delete opt; MXNotifyShutdown(); + CATCH return 0; } diff --git a/cpp-package/example/test_score.cpp b/cpp-package/example/test_score.cpp index 687683f487f8..0ccdf65b3b19 100644 --- a/cpp-package/example/test_score.cpp +++ b/cpp-package/example/test_score.cpp @@ -62,6 +62,7 @@ int main(int argc, char** argv) { const int max_epoch = 10; const float learning_rate = 0.1; const float weight_decay = 1e-2; + float score = 0; std::vector data_files = { "./data/mnist_data/train-images-idx3-ubyte", "./data/mnist_data/train-labels-idx1-ubyte", @@ -79,6 +80,7 @@ int main(int argc, char** argv) { return 1; } + TRY auto net = mlp(layers); Context ctx = Context::gpu(); // Use GPU for training @@ -111,7 +113,6 @@ int main(int argc, char** argv) { auto *exec = net.SimpleBind(ctx, args); auto arg_names = net.ListArguments(); - float score = 0; // Start training for (int iter = 0; iter < max_epoch; ++iter) { int samples = 0; @@ -158,5 +159,6 @@ int main(int argc, char** argv) { delete exec; delete opt; MXNotifyShutdown(); + CATCH return score >= MIN_SCORE ? 0 : 1; } diff --git a/cpp-package/example/utils.h b/cpp-package/example/utils.h index 020d1ec5804e..87847701ce6e 100644 --- a/cpp-package/example/utils.h +++ b/cpp-package/example/utils.h @@ -27,6 +27,15 @@ using namespace mxnet::cpp; +#define TRY \ + try { +#define CATCH \ + } catch(dmlc::Error &err) { \ + LG << "Status: FAIL";\ + LG << "With Error: " << MXGetLastError(); \ + return 1; \ + } + bool isFileExists(const std::string &filename) { std::ifstream fhandle(filename.c_str()); return fhandle.good();