nswamy closed pull request #13284: [Example] fix cpp example inception-bn and 
training acc issue
URL: https://github.com/apache/incubator-mxnet/pull/13284
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/cpp-package/example/alexnet.cpp b/cpp-package/example/alexnet.cpp
index 3d6e6855b64..988e9470a2e 100644
--- a/cpp-package/example/alexnet.cpp
+++ b/cpp-package/example/alexnet.cpp
@@ -258,7 +258,7 @@ int main(int argc, char const *argv[]) {
   auto val_iter = MXDataIter("MNISTIter");
   setDataIter(&val_iter, "Label", data_files, batch_size);
 
-  Optimizer* opt = OptimizerRegistry::Find("ccsgd");
+  Optimizer* opt = OptimizerRegistry::Find("sgd");
   opt->SetParam("momentum", 0.9)
      ->SetParam("rescale_grad", 1.0 / batch_size)
      ->SetParam("clip_gradient", 10)
diff --git a/cpp-package/example/charRNN.cpp b/cpp-package/example/charRNN.cpp
index ad564f665a8..54b8eea7af3 100644
--- a/cpp-package/example/charRNN.cpp
+++ b/cpp-package/example/charRNN.cpp
@@ -465,7 +465,7 @@ void train(const std::string file, int batch_size, int 
max_epoch, int start_epoc
 
   mx_float learning_rate = 0.0002;
   mx_float weight_decay = 0.000002;
-  Optimizer* opt = OptimizerRegistry::Find("ccsgd");
+  Optimizer* opt = OptimizerRegistry::Find("sgd");
   opt->SetParam("lr", learning_rate)
      ->SetParam("wd", weight_decay);
 //  opt->SetParam("momentum", 0.9)->SetParam("rescale_grad", 1.0 / batch_size)
diff --git a/cpp-package/example/googlenet.cpp 
b/cpp-package/example/googlenet.cpp
index ad9212c75be..4bd3be27fa4 100644
--- a/cpp-package/example/googlenet.cpp
+++ b/cpp-package/example/googlenet.cpp
@@ -144,7 +144,7 @@ int main(int argc, char const *argv[]) {
   auto val_iter = MXDataIter("MNISTIter");
   setDataIter(&val_iter, "Label", data_files, batch_size);
 
-  Optimizer* opt = OptimizerRegistry::Find("ccsgd");
+  Optimizer* opt = OptimizerRegistry::Find("sgd");
   opt->SetParam("momentum", 0.9)
      ->SetParam("rescale_grad", 1.0 / batch_size)
      ->SetParam("clip_gradient", 10)
diff --git a/cpp-package/example/inception_bn.cpp 
b/cpp-package/example/inception_bn.cpp
index c499df77e1e..5b444e467a3 100644
--- a/cpp-package/example/inception_bn.cpp
+++ b/cpp-package/example/inception_bn.cpp
@@ -91,7 +91,8 @@ Symbol InceptionFactoryB(Symbol data, int num_3x3red, int 
num_3x3,
                         Shape(1, 1), name + "_double_3x3_1");
   Symbol pooling = Pooling("max_pool_" + name + "_pool", data,
                            Shape(3, 3), PoolingPoolType::kMax,
-                           false, false, PoolingPoolingConvention::kValid, 
Shape(2, 2));
+                           false, false, PoolingPoolingConvention::kValid,
+                           Shape(2, 2), Shape(1, 1));
   std::vector<Symbol> lst;
   lst.push_back(c3x3);
   lst.push_back(cd3x3);
@@ -143,8 +144,8 @@ Symbol InceptionSymbol(int num_classes) {
 
 int main(int argc, char const *argv[]) {
   int batch_size = 40;
-  int max_epoch = 100;
-  float learning_rate = 1e-4;
+  int max_epoch = argc > 1 ? strtol(argv[1], NULL, 10) : 100;
+  float learning_rate = 1e-2;
   float weight_decay = 1e-4;
 
   auto ctx = Context::gpu();
@@ -172,7 +173,13 @@ int main(int argc, char const *argv[]) {
   auto val_iter = MXDataIter("MNISTIter");
   setDataIter(&val_iter, "Label", data_files, batch_size);
 
-  Optimizer* opt = OptimizerRegistry::Find("ccsgd");
+  // initialize parameters
+  Xavier xavier = Xavier(Xavier::gaussian, Xavier::in, 2);
+  for (auto &arg : args_map) {
+    xavier(arg.first, &arg.second);
+  }
+
+  Optimizer* opt = OptimizerRegistry::Find("sgd");
   opt->SetParam("momentum", 0.9)
      ->SetParam("rescale_grad", 1.0 / batch_size)
      ->SetParam("clip_gradient", 10)
@@ -182,9 +189,12 @@ int main(int argc, char const *argv[]) {
   auto *exec = inception_bn_net.SimpleBind(ctx, args_map);
   auto arg_names = inception_bn_net.ListArguments();
 
+  // Create metrics
+  Accuracy train_acc, val_acc;
   for (int iter = 0; iter < max_epoch; ++iter) {
     LG << "Epoch: " << iter;
     train_iter.Reset();
+    train_acc.Reset();
     while (train_iter.Next()) {
       auto data_batch = train_iter.GetDataBatch();
       data_batch.data.CopyTo(&args_map["data"]);
@@ -200,10 +210,11 @@ int main(int argc, char const *argv[]) {
       }
 
       NDArray::WaitAll();
+      train_acc.Update(data_batch.label, exec->outputs[0]);
     }
 
-    Accuracy acu;
     val_iter.Reset();
+    val_acc.Reset();
     while (val_iter.Next()) {
       auto data_batch = val_iter.GetDataBatch();
       data_batch.data.CopyTo(&args_map["data"]);
@@ -211,9 +222,10 @@ int main(int argc, char const *argv[]) {
       NDArray::WaitAll();
       exec->Forward(false);
       NDArray::WaitAll();
-      acu.Update(data_batch.label, exec->outputs[0]);
+      val_acc.Update(data_batch.label, exec->outputs[0]);
     }
-    LG << "Accuracy: " << acu.Get();
+    LG << "Train Accuracy: " << train_acc.Get();
+    LG << "Validation Accuracy: " << val_acc.Get();
   }
   delete exec;
   MXNotifyShutdown();
diff --git a/cpp-package/example/lenet_with_mxdataiter.cpp 
b/cpp-package/example/lenet_with_mxdataiter.cpp
index 9869356be08..4df6fbee92e 100644
--- a/cpp-package/example/lenet_with_mxdataiter.cpp
+++ b/cpp-package/example/lenet_with_mxdataiter.cpp
@@ -102,7 +102,7 @@ int main(int argc, char const *argv[]) {
   auto val_iter = MXDataIter("MNISTIter");
   setDataIter(&val_iter, "Label", data_files, batch_size);
 
-  Optimizer* opt = OptimizerRegistry::Find("ccsgd");
+  Optimizer* opt = OptimizerRegistry::Find("sgd");
   opt->SetParam("momentum", 0.9)
      ->SetParam("rescale_grad", 1.0)
      ->SetParam("clip_gradient", 10)
diff --git a/cpp-package/example/resnet.cpp b/cpp-package/example/resnet.cpp
index bc86c0b6603..0bb77a1a128 100644
--- a/cpp-package/example/resnet.cpp
+++ b/cpp-package/example/resnet.cpp
@@ -184,7 +184,13 @@ int main(int argc, char const *argv[]) {
   auto val_iter = MXDataIter("MNISTIter");
   setDataIter(&val_iter, "Label", data_files, batch_size);
 
-  Optimizer* opt = OptimizerRegistry::Find("ccsgd");
+  // initialize parameters
+  Xavier xavier = Xavier(Xavier::gaussian, Xavier::in, 2);
+  for (auto &arg : args_map) {
+    xavier(arg.first, &arg.second);
+  }
+
+  Optimizer* opt = OptimizerRegistry::Find("sgd");
   opt->SetParam("lr", learning_rate)
      ->SetParam("wd", weight_decay)
      ->SetParam("momentum", 0.9)
@@ -194,9 +200,12 @@ int main(int argc, char const *argv[]) {
   auto *exec = resnet.SimpleBind(ctx, args_map);
   auto arg_names = resnet.ListArguments();
 
+  // Create metrics
+  Accuracy train_acc, val_acc;
   for (int iter = 0; iter < max_epoch; ++iter) {
     LG << "Epoch: " << iter;
     train_iter.Reset();
+    train_acc.Reset();
     while (train_iter.Next()) {
       auto data_batch = train_iter.GetDataBatch();
       data_batch.data.CopyTo(&args_map["data"]);
@@ -211,10 +220,11 @@ int main(int argc, char const *argv[]) {
         opt->Update(i, exec->arg_arrays[i], exec->grad_arrays[i]);
       }
       NDArray::WaitAll();
+      train_acc.Update(data_batch.label, exec->outputs[0]);
     }
 
-    Accuracy acu;
     val_iter.Reset();
+    val_acc.Reset();
     while (val_iter.Next()) {
       auto data_batch = val_iter.GetDataBatch();
       data_batch.data.CopyTo(&args_map["data"]);
@@ -222,9 +232,10 @@ int main(int argc, char const *argv[]) {
       NDArray::WaitAll();
       exec->Forward(false);
       NDArray::WaitAll();
-      acu.Update(data_batch.label, exec->outputs[0]);
+      val_acc.Update(data_batch.label, exec->outputs[0]);
     }
-    LG << "Accuracy: " << acu.Get();
+    LG << "Train Accuracy: " << train_acc.Get();
+    LG << "Validation Accuracy: " << val_acc.Get();
   }
   delete exec;
   MXNotifyShutdown();
diff --git a/cpp-package/include/mxnet-cpp/symbol.hpp 
b/cpp-package/include/mxnet-cpp/symbol.hpp
index b82e060ca8d..aed96394906 100644
--- a/cpp-package/include/mxnet-cpp/symbol.hpp
+++ b/cpp-package/include/mxnet-cpp/symbol.hpp
@@ -281,8 +281,8 @@ inline void Symbol::InferExecutorArrays(
     auto iter_req = grad_req_type.find(arg_name);
     if (iter_req != grad_req_type.end()) {
       grad_reqs->push_back(iter_req->second);
-    } else if (arg_name.rfind("data") == arg_name.length() - 4
-            || arg_name.rfind("label") == arg_name.length() - 5) {
+    } else if (arg_name.rfind("data") != std::string::npos
+            || arg_name.rfind("label") != std::string::npos) {
       grad_reqs->push_back(OpReqType::kNullOp);
     } else {
       grad_reqs->push_back(OpReqType::kWriteTo);


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to