Tensorflow tflite c ++ api для массива матричных данных - PullRequest
1 голос
/ 20 апреля 2020

Я создаю класс, который будет использоваться для запуска логического вывода на встроенном устройстве (не на Raspberry Pi) в C ++ с использованием API-интерфейса TensiteFox c ++ api. Tensorflow, похоже, не имеет достойной документации о том, как выполнить вывод для n чисел выборок данных изображения. Моя форма данных в python (n, 5, 40, 1) [n выборок, 5 высот, 40 ширины, 1 канал]. Чего я не могу понять, так это как вводить данные и получать вывод по образцу в выводе. У меня есть два класса, поэтому я должен получить n 2-й выход массива. Кто-нибудь знает, можно ли передать любой тип данных, например Eigen? Я тестирую с вводом формы (1, 5, 2, 1), чтобы упростить мой тест.

#include "classifier.h"
#include <iostream>

using namespace tflite;

Classifier::Classifier(std::string modelPath) {
    tflite::StderrReporter error_reporter;
    model = tflite::FlatBufferModel::BuildFromFile(modelPath.c_str(), &error_reporter);

    tflite::ops::builtin::BuiltinOpResolver resolver;
    tflite::InterpreterBuilder(*model, resolver)(&interpreter); // private class variable interpreter
    std::vector<int> sizes = {1, 5, 2, 1};
    interpreter->ResizeInputTensor(0, sizes);
    interpreter->AllocateTensors();


}

std::vector<std::vector<float> Classifier::getDataSamples() {
    std::vector<std::vector<float> test = {{0.02, 0.02}, {0.02, 0.02}, {0.02, 0.02},{0.02, 0.02},{0.02, 0.02},};
    return test;
}

float Classifier::predict() {


    std::vector<float> signatures = getDataSamples();
    for (int i = 0; i < signatures.size(); ++i) {
        interpreter->typed_input_tensor<float>(0)[i];
    }

    // float* input = interpreter->typed_input_tensor<float>(0);
    // *input = 1.0;

    interpreter->Invoke();

    float* output = interpreter->typed_output_tensor<float>(0);

    return *output;
}

1 Ответ

0 голосов
/ 06 мая 2020

Из документации Tensorflow мы можем найти ниже детали,

Следует отметить, что:

  • Тензорные числа представлены целыми числами, чтобы избежать сравнения строк ( и любая фиксированная зависимость от строковых библиотек).
  • К интерпретатору нельзя обращаться из параллельных потоков.
  • Выделение памяти для входных и выходных тензоров должно быть инициировано вызовом AllocateTensors () сразу после изменения размера тензоров .

Вы можете найти больше информации о Загрузить и запустить модель в C ++ здесь .

...