c++ - 如何在 C++ API 中使用 NDArray?

标签 c++ mxnet

我正在更改 mxnet 中的 C++ 示例。我不明白如何分配 NDArray 对象。甚至没有基本的文档,这非常令人沮丧。

我尝试分配一个 NDArray,但是通过声明一个实例它似乎并没有分配数据,只有当我用数据填充一个数组时。对吗?

// this code snippet does not work     
  NDArray a = NDArray(Shape(10, 20), Context::cpu());
  const float *dat = a.GetData();
  float result = *dat; // read memory violation
  result = *(dat + 10);

// this code snippet works
  NDArray b = NDArray(Shape(10, 20), Context::cpu());
  a.SampleUniform(1.0, 2.0, &b);
  const float *dat2 = b.GetData();
  float result2 = *dat2; // works!!
  result2 = *(dat2 + 10); 

有人使用过 C++ API 和不断变化的网络吗?

最佳答案

还有第三个参数delay_alloc: https://github.com/apache/incubator-mxnet/blob/master/cpp-package/include/mxnet-cpp/ndarray.h#L144

将其设置为 false,您的代码将起作用。

关于c++ - 如何在 C++ API 中使用 NDArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45607275/

相关文章:

c++ - Qt SplashScreen w/Fading Logo 不运行动画

c++ - 常量成员初始化

未分配正在释放的 C++ 指针(可能是 unique_ptr 或 boost::ublas 的问题)

c++ - Mxnet C++ API的输出值

python - MXNET : how to make prediction using a trained RNN model

tensorflow - MXNet 与其他深度学习 API 相比的优缺点

numpy - cv2.imread 和 open().read 有什么区别?

C++11 将函数作为 lambda 参数传递

c++ - 线程函数无法从堆上分配的缓冲区中读取字符

r - 如何在 R 4.0.2 中安装 "mxnet"包