You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mxnet.apache.org by la...@apache.org on 2019/06/07 22:05:20 UTC
[incubator-mxnet] branch master updated: [MXNET-1416] Fix inception
inference example for potential index out of range error. (#15179)
This is an automated email from the ASF dual-hosted git repository.
lanking pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-mxnet.git
The following commit(s) were added to refs/heads/master by this push:
new 745a41c [MXNET-1416] Fix inception inference example for potential index out of range error. (#15179)
745a41c is described below
commit 745a41ca1a6d74a645911de8af46dece03db93ea
Author: Amol Lele <19...@users.noreply.github.com>
AuthorDate: Fri Jun 7 15:04:37 2019 -0700
[MXNET-1416] Fix inception inference example for potential index out of range error. (#15179)
* Adding support to get the data from 1D NDArray.
* Added the error handling for index out of range.
---
cpp-package/example/inference/inception_inference.cpp | 4 +---
cpp-package/include/mxnet-cpp/ndarray.h | 6 ++++++
cpp-package/include/mxnet-cpp/ndarray.hpp | 13 ++++++++++++-
3 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/cpp-package/example/inference/inception_inference.cpp b/cpp-package/example/inference/inception_inference.cpp
index fa56001..4d7d5f4 100644
--- a/cpp-package/example/inference/inception_inference.cpp
+++ b/cpp-package/example/inference/inception_inference.cpp
@@ -302,13 +302,11 @@ void Predictor::PredictImage(const std::string& image_file) {
// The output is available in executor->outputs.
auto array = executor->outputs[0].Copy(Context::cpu());
-
/*
* Find out the maximum accuracy and the index associated with that accuracy.
* This is done by using the argmax operator on NDArray.
*/
auto predicted = array.ArgmaxChannel();
-
/*
* Wait until all the previous write operations on the 'predicted'
* NDArray to be complete before we read it.
@@ -317,7 +315,7 @@ void Predictor::PredictImage(const std::string& image_file) {
*/
predicted.WaitToRead();
- int best_idx = predicted.At(0, 0);
+ int best_idx = predicted.At(0);
float best_accuracy = array.At(0, best_idx);
if (output_labels.empty()) {
diff --git a/cpp-package/include/mxnet-cpp/ndarray.h b/cpp-package/include/mxnet-cpp/ndarray.h
index 7953b61..c4d51c5 100644
--- a/cpp-package/include/mxnet-cpp/ndarray.h
+++ b/cpp-package/include/mxnet-cpp/ndarray.h
@@ -321,6 +321,12 @@ class NDArray {
*/
size_t Offset(size_t c, size_t h, size_t w) const;
/*!
+ * \brief return value of the element at (index)
+ * \param index position
+ * \return value of one dimensions array
+ */
+ mx_float At(size_t index) const;
+ /*!
* \brief return value of the element at (h, w)
* \param h height position
* \param w width position
diff --git a/cpp-package/include/mxnet-cpp/ndarray.hpp b/cpp-package/include/mxnet-cpp/ndarray.hpp
index 283fff1..ed23c76 100644
--- a/cpp-package/include/mxnet-cpp/ndarray.hpp
+++ b/cpp-package/include/mxnet-cpp/ndarray.hpp
@@ -375,11 +375,15 @@ inline void NDArray::Save(const std::string &file_name,
}
inline size_t NDArray::Offset(size_t h, size_t w) const {
- return (h * GetShape()[1]) + w;
+ auto const shape = GetShape();
+ CHECK_EQ(shape.size(), 2) << "The NDArray needs to be 2 dimensional.";
+
+ return (h * shape[1]) + w;
}
inline size_t NDArray::Offset(size_t c, size_t h, size_t w) const {
auto const shape = GetShape();
+ CHECK_EQ(shape.size(), 3) << "The NDArray needs to be 3 dimensional.";
return h * shape[0] * shape[2] + w * shape[0] + c;
}
@@ -391,6 +395,13 @@ inline mx_float NDArray::At(size_t c, size_t h, size_t w) const {
return GetData()[Offset(c, h, w)];
}
+inline mx_float NDArray::At(size_t index) const {
+ auto shape = GetShape();
+ CHECK_EQ(shape.size(), 1) << "The NDArray needs to be 1 dimensional.";
+ CHECK_LT(index, shape[0]) << "Specified index is out of range.";
+ return GetData()[index];
+}
+
inline size_t NDArray::Size() const {
size_t ret = 1;
for (auto &i : GetShape()) ret *= i;