TensorFlow Lite模型测试:正确的代码,类的概率

时间:2019-10-18 19:11:48

标签: c++ tensorflow tensorflow-lite

我正在尝试使用TensorflowLite模型测试TensorFlow lite c ++代码。模型获取256 * 256的浮点数数组(频谱图或图像),并对此数据进行一些推断。 TF Lite模型旨在解决将问题分为5类的问题。它是通过转换从常规TF模型得出的。我使用的是TF Lite 2.0。

Test model

这是我的代码:

#include <iostream>
#include <cstdio>
#include "../tensorflow/tensorflow/lite/interpreter.h"
#include "../tensorflow/tensorflow/lite/model.h"
#include "../tensorflow/tensorflow/lite/kernels/register.h"
#include "../tensorflow/tensorflow/lite/op_resolver.h"
#include <cstdlib>

int main(int argc, char** argv)
{

    const char* filename = argv[1];

    std::unique_ptr<tflite::FlatBufferModel> model = tflite::FlatBufferModel::BuildFromFile(filename);

    tflite::ops::builtin::BuiltinOpResolver resolver;
    std::unique_ptr<tflite::Interpreter> interpreter;
    tflite::InterpreterBuilder(*model, resolver)(&interpreter);

    interpreter->SetNumThreads(4);
    interpreter->AllocateTensors();

    for(int i = 0; i < 256*256; i++){
    float input = rand() % 10 + rand() % 10;
            interpreter->typed_input_tensor<float>(0)[i] = input;
            //printf("%f ", input);
    }
    //printf("\n");

    interpreter->Invoke();
    int output = interpreter->outputs()[0];

    printf("%d ",  output);

    for(int i = 0; i < 5; i++)
    {
        float output  = interpreter->typed_output_tensor<float>(0)[i];
        printf("%f ", (output));
    }
    printf("\n");
} 

我有一些问题:

  • 如何组织输入数据(如何将二维频谱图应用于模型的输入)?

  • 如何以正确的方式获取类的输出概率?

  • 我编写了正确的代码来测试模型吗?

1 个答案:

答案 0 :(得分:1)

您的代码看起来正确。而且由于Tensorflow Lite以行为主格式查看张量,因此分配输入的方式似乎很合理。

您可能不需要这个:

int output = interpreter->outputs()[0];

printf("%d ",  output);

否则,情况看起来还不错。 如果您以与训练期间相同的方式对输入图像/频谱图进行预处理,则应该获得期望的输出。