C++的MxNETnDAREL迭代器 我想在C++中训练一个简单的分类器,非常适合于,但是我的数据不是存储在HD上,而是已经加载到内存中,比如说MxNETARDY。在Python中,为了达到这个目的,有一个方便的NDArrayIter,c.f 是否存在C++的nDARIL迭代器?< /P>
浏览代码时,我发现所有可能的MXDataIter都可以从MXListDataiter和MXDataIterGetIterInfo中读取: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中实现的,
所以,在我看来,对于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