C++的MxNETnDAREL迭代器 我想在C++中训练一个简单的分类器,非常适合于,但是我的数据不是存储在HD上,而是已经加载到内存中,比如说MxNETARDY。在Python中,为了达到这个目的,有一个方便的NDArrayIter,c.f 是否存在C++的nDARIL迭代器?< /P>

C++的MxNETnDAREL迭代器 我想在C++中训练一个简单的分类器,非常适合于,但是我的数据不是存储在HD上,而是已经加载到内存中,比如说MxNETARDY。在Python中,为了达到这个目的,有一个方便的NDArrayIter,c.f 是否存在C++的nDARIL迭代器?< /P>,c++,iterator,mxnet,C++,Iterator,Mxnet,浏览代码时,我发现所有可能的MXDataIter都可以从MXListDataiter和MXDataIterGetIterInfo中读取: 所以,在我看来,对于C++来说,没有NDAREL迭代器,最简单的解决方案是将数据写入CSV文件,然后再加载到MxDATA迭代引擎中。另一种可能是手动将数据分割成批式NDRAY,并将这些数据放入训练中,但这也感觉笨拙。 < P>不幸的是,C++中没有NDArrayIter。p> 但我想说,如果你真的需要的话,实施起来应该不难。看看它是如何在Python中实现的,

浏览代码时,我发现所有可能的MXDataIter都可以从MXListDataiter和MXDataIterGetIterInfo中读取:


所以,在我看来,对于C++来说,没有NDAREL迭代器,最简单的解决方案是将数据写入CSV文件,然后再加载到MxDATA迭代引擎中。另一种可能是手动将数据分割成批式NDRAY,并将这些数据放入训练中,但这也感觉笨拙。

< P>不幸的是,C++中没有NDArrayIter。p>
但我想说,如果你真的需要的话,实施起来应该不难。看看它是如何在Python中实现的,也许你可以通过C++实现,来回馈社区。这显然不是我希望的答案,但是谢谢你的回答。
#include "mxnet-cpp/io.h"
using namespace std;
using namespace mxnet::cpp;

int main(int argc, char** argv) {
  Context ctx = Context::cpu();  // Use CPU

  mx_uint num_data_iter_creators;
  DataIterCreator *data_iter_creators = nullptr;

  int r = MXListDataIters(&num_data_iter_creators, &data_iter_creators);
  CHECK_EQ(r, 0);
  cout << "num_data_iter_creators = " << num_data_iter_creators << endl;
  //output: num_data_iter_creators = 8

  const char *name;
  const char *description;
  mx_uint num_args;
  const char **arg_names;
  const char **arg_type_infos;
  const char **arg_descriptions;

  for (mx_uint i = 0; i < num_data_iter_creators; i++) {
      r = MXDataIterGetIterInfo(data_iter_creators[i], &name, &description,
                                &num_args, &arg_names, &arg_type_infos,
                                &arg_descriptions);
      CHECK_EQ(r, 0);
      cout << " i: " << i << ", name: " << name << endl;
  }

  MXNotifyShutdown();
  return 0;
}
num_data_iter_creators = 8
 i: 0, name: ImageDetRecordIter
 i: 1, name: CSVIter
 i: 2, name: ImageRecordIter_v1
 i: 3, name: ImageRecordUInt8Iter_v1
 i: 4, name: MNISTIter
 i: 5, name: ImageRecordIter
 i: 6, name: ImageRecordUInt8Iter
 i: 7, name: LibSVMIter