You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mxnet.apache.org by cj...@apache.org on 2018/04/03 19:55:40 UTC
[incubator-mxnet] branch master updated: [MXNET-128] added load
from buffer functions (#10261)
This is an automated email from the ASF dual-hosted git repository.
cjolivier01 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 a157d17 [MXNET-128] added load from buffer functions (#10261)
a157d17 is described below
commit a157d17816e914165b4bbb9c5f9067aeff354a5b
Author: David Braude <da...@gmail.com>
AuthorDate: Tue Apr 3 20:55:35 2018 +0100
[MXNET-128] added load from buffer functions (#10261)
* rebased on master
* Update ndarray.h
* clairified comment
Mainly done to get to retest
---
cpp-package/include/mxnet-cpp/ndarray.h | 26 +++++++++++++++
cpp-package/include/mxnet-cpp/ndarray.hpp | 55 +++++++++++++++++++++++++++++++
2 files changed, 81 insertions(+)
diff --git a/cpp-package/include/mxnet-cpp/ndarray.h b/cpp-package/include/mxnet-cpp/ndarray.h
index 1166643..6f37d91 100644
--- a/cpp-package/include/mxnet-cpp/ndarray.h
+++ b/cpp-package/include/mxnet-cpp/ndarray.h
@@ -398,6 +398,32 @@ class NDArray {
*/
static std::vector<NDArray> LoadToList(const std::string &file_name);
/*!
+ * \brief Load NDArrays from buffer.
+ * \param buffer Pointer to buffer. (ie contents of param file)
+ * \param size Size of buffer
+ * \param array_list a list of NDArrays returned, do not fill the list if
+ * nullptr is given.
+ * \param array_map a map from names to NDArrays returned, do not fill the map
+ * if nullptr is given or no names is stored in binary file.
+ */
+ static void LoadFromBuffer(const void *buffer, size_t size,
+ std::vector<NDArray> *array_list = nullptr,
+ std::map<std::string, NDArray> *array_map = nullptr);
+ /*!
+ * \brief Load map of NDArrays from buffer.
+ * \param buffer Pointer to buffer. (ie contents of param file)
+ * \param size Size of buffer
+ * \return a list of NDArrays.
+ */
+ static std::map<std::string, NDArray> LoadFromBufferToMap(const void *buffer, size_t size);
+ /*!
+ * \brief Load list of NDArrays from buffer.
+ * \param buffer Pointer to buffer. (ie contents of param file)
+ * \param size Size of buffer
+ * \return a map from names to NDArrays.
+ */
+ static std::vector<NDArray> LoadFromBufferToList(const void *buffer, size_t size);
+ /*!
* \brief save a map of string->NDArray to binary file.
* \param file_name name of the binary file.
* \param array_map a map from names to NDArrays.
diff --git a/cpp-package/include/mxnet-cpp/ndarray.hpp b/cpp-package/include/mxnet-cpp/ndarray.hpp
index 3c3b85d..966cf75 100644
--- a/cpp-package/include/mxnet-cpp/ndarray.hpp
+++ b/cpp-package/include/mxnet-cpp/ndarray.hpp
@@ -255,6 +255,7 @@ inline void NDArray::Load(const std::string &file_name,
&out_names),
0);
if (array_list != nullptr) {
+ array_list->reserve(out_size);
for (mx_uint i = 0; i < out_size; ++i) {
array_list->push_back(NDArray(out_arr[i]));
}
@@ -291,6 +292,60 @@ inline std::vector<NDArray> NDArray::LoadToList(const std::string &file_name) {
CHECK_EQ(MXNDArrayLoad(file_name.c_str(), &out_size, &out_arr, &out_name_size,
&out_names),
0);
+ array_list.reserve(out_size);
+ for (mx_uint i = 0; i < out_size; ++i) {
+ array_list.push_back(NDArray(out_arr[i]));
+ }
+ return array_list;
+}
+inline void NDArray::LoadFromBuffer(const void *buffer, size_t size,
+ std::vector<NDArray> *array_list,
+ std::map<std::string, NDArray> *array_map) {
+ mx_uint out_size, out_name_size;
+ NDArrayHandle *out_arr;
+ const char **out_names;
+ CHECK_EQ(MXNDArrayLoadFromBuffer(buffer, size, &out_size, &out_arr, &out_name_size,
+ &out_names),
+ 0);
+ if (array_list != nullptr) {
+ array_list->reserve(out_size);
+ for (mx_uint i = 0; i < out_size; ++i) {
+ array_list->push_back(NDArray(out_arr[i]));
+ }
+ }
+ if (array_map != nullptr && out_name_size > 0) {
+ CHECK_EQ(out_name_size, out_size);
+ for (mx_uint i = 0; i < out_size; ++i) {
+ (*array_map)[out_names[i]] = NDArray(out_arr[i]);
+ }
+ }
+}
+inline std::map<std::string, NDArray> NDArray::LoadFromBufferToMap(
+ const void *buffer, size_t size) {
+ std::map<std::string, NDArray> array_map;
+ mx_uint out_size, out_name_size;
+ NDArrayHandle *out_arr;
+ const char **out_names;
+ CHECK_EQ(MXNDArrayLoadFromBuffer(buffer, size, &out_size, &out_arr, &out_name_size,
+ &out_names),
+ 0);
+ if (out_name_size > 0) {
+ CHECK_EQ(out_name_size, out_size);
+ for (mx_uint i = 0; i < out_size; ++i) {
+ array_map[out_names[i]] = NDArray(out_arr[i]);
+ }
+ }
+ return array_map;
+}
+inline std::vector<NDArray> NDArray::LoadFromBufferToList(const void *buffer, size_t size) {
+ std::vector<NDArray> array_list;
+ mx_uint out_size, out_name_size;
+ NDArrayHandle *out_arr;
+ const char **out_names;
+ CHECK_EQ(MXNDArrayLoadFromBuffer(buffer, size, &out_size, &out_arr, &out_name_size,
+ &out_names),
+ 0);
+ array_list.reserve(out_size);
for (mx_uint i = 0; i < out_size; ++i) {
array_list.push_back(NDArray(out_arr[i]));
}
--
To stop receiving notification emails like this one, please contact
cjolivier01@apache.org.