如何在 MXNet 的 C++ 中预测小批量示例?
How to predict a mini-batch examples in C++ of MXNet?
在python接口中,我们可以使用一个mini-batch examples来做像net([[1,2],[3,4],[5,6]])
这样的预测。
但在 C++ 中,我无法找到执行此操作的方法。
假设调用网络预测单个样本需要 10ms。如果有10000个例子需要做预测,那就是100s
void OneInputOneOutputPredict(PredictorHandle pred_hnd, std::vector<mx_float> vector_data, std::vector<mx_float> &output)
{
MXPredSetInput(pred_hnd, "data", vector_data.data(), vector_data.size());
// Do Predict Forward
MXPredForward(pred_hnd);
mx_uint output_index = 0;
mx_uint *shape = 0;
mx_uint shape_len;
MXPredGetOutputShape(pred_hnd, output_index, &shape, &shape_len);
size_t size = 1;
for (mx_uint i = 0; i < shape_len; ++i) size *= shape[i];
std::vector<float> data(size);
assert(0 == MXPredGetOutput(pred_hnd, output_index, &(data[0]), size));
output = data;
}
//very long time
for(int step=0;step<10000;step++)
OneInputOneOutputPredict(pred_hnd, vector_data, vector_label);
我们能否在 C++ 中使用矢量化代码或某种方式来加快预测速度?
原本
input_shape_data 看起来像这样
const mx_uint input_shape_data[4] = {1, static_cast<mx_uint>(data_len)};
现在如果我想预测一个小批量(批量大小 3)
const mx_uint input_shape_data[4] = {3, static_cast<mx_uint>(data_len)};
如果使用 seq2seq model.If 数据看起来像 [[1,2],[3,4],[5,6]]
,现在只需将其扁平化为列表 {1,2,3,4,5,6}
,那么一切都可以
在python接口中,我们可以使用一个mini-batch examples来做像net([[1,2],[3,4],[5,6]])
这样的预测。
但在 C++ 中,我无法找到执行此操作的方法。
假设调用网络预测单个样本需要 10ms。如果有10000个例子需要做预测,那就是100s
void OneInputOneOutputPredict(PredictorHandle pred_hnd, std::vector<mx_float> vector_data, std::vector<mx_float> &output)
{
MXPredSetInput(pred_hnd, "data", vector_data.data(), vector_data.size());
// Do Predict Forward
MXPredForward(pred_hnd);
mx_uint output_index = 0;
mx_uint *shape = 0;
mx_uint shape_len;
MXPredGetOutputShape(pred_hnd, output_index, &shape, &shape_len);
size_t size = 1;
for (mx_uint i = 0; i < shape_len; ++i) size *= shape[i];
std::vector<float> data(size);
assert(0 == MXPredGetOutput(pred_hnd, output_index, &(data[0]), size));
output = data;
}
//very long time
for(int step=0;step<10000;step++)
OneInputOneOutputPredict(pred_hnd, vector_data, vector_label);
我们能否在 C++ 中使用矢量化代码或某种方式来加快预测速度?
原本 input_shape_data 看起来像这样
const mx_uint input_shape_data[4] = {1, static_cast<mx_uint>(data_len)};
现在如果我想预测一个小批量(批量大小 3)
const mx_uint input_shape_data[4] = {3, static_cast<mx_uint>(data_len)};
如果使用 seq2seq model.If 数据看起来像 [[1,2],[3,4],[5,6]]
,现在只需将其扁平化为列表 {1,2,3,4,5,6}
,那么一切都可以