Mxnet ndarray итератор для переполнения стека

Я хотел бы обучить простой классификатор в C ++, очень в духе Пример C ++ Mnist, где, однако, мои данные не хранятся на жестком диске, но уже загружены в память, скажем, в mxnet NDArray. В Python для этого есть удобный NDArrayIter, ср. Модуль учебник.

Есть ли такой итератор NDArray для C ++?

Просматривая код я обнаружил, что все возможно MXDataIterможно прочитать из MXListDataIters а также MXDataIterGetIterInfo:

#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;
}

что дает восемь MXDataIter()«S:

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

Таким образом, мне кажется, что для C ++ нет итератора NDArray и что самым простым решением было бы записать мои данные в csv-файлы только для последующей загрузки их в MXDataIter(CSVIter), Другой возможностью было бы вручную разделить данные на пакетные NDArray и подать их на обучение, но это также кажется неуклюжим.

0

Решение

К сожалению, в пакете C ++ нет NDArrayIter.

Но я бы сказал, что это не должно быть сложно реализовать, если вам это действительно нужно. Посмотрите, как это реализовано в Python, и, возможно, вы сможете внести свой вклад в сообщество своей реализацией для C ++ — https://github.com/apache/incubator-mxnet/blob/fe5b56e419d454dc8f42f0307f53ced133804ca7/python/mxnet/io.py#L544

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]