Пакетное прогнозирование Tensorflow в C ++ - PullRequest
0 голосов
/ 25 апреля 2018

Следующий код действителен, но для одного случая. Мои попытки предсказания партий заканчиваются ошибкой сегментации.

Есть ли способ, например, загрузить 10 изображений, привести их к тензорам, добавить их в вектор и загрузить их в сеанс, а затем прочитать их результаты?

В Python я смог добиться эффективности, когда прогноз был в пакетном режиме.

Mat suspect = test.clone();

Tensor inputImg(DT_FLOAT, TensorShape({1, input_height, input_width, 1}));
auto inputImageMapped = inputImg.tensor<float, 4>();

for (int y = 0; y < input_height; ++y) {
     const float *source_row = ((float *) suspect.data) + (y * input_width);
     for (int x = 0; x < input_width; ++x) {
                    const float *source_pixel = source_row + x;
                    inputImageMapped(0, y, x, 0) = source_pixel[0];
     }
}

string input_layer = "conv2d_1_input";
string output_layer = "activation_6/Softmax";
std::vector<Tensor> outputs;

Status run_status = session->Run({{input_layer, inputImg}},
                                {output_layer}, {}, &outputs);

1 Ответ

0 голосов
/ 25 апреля 2018

Для вашей проблемы я бы посоветовал вам выполнить следующие шаги:

  1. Убедитесь, что ваш cpp-код является валидным, без ошибок при связывании с библиотекой tenorflow.
  2. Затем заставьте его работать правильно с запросом прогнозирования single.
  3. Попробуйте изменить его для запуска с multiple запросом прогнозирования.

Для шага 3 имейте в виду: При экспорте модели убедитесь, что вы экспортировали SavedModel с его входными заполнителями, определенными как shape=[None], если вы хотите сделать несколько прогнозов в одном запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...