Closed pv-98 closed 1 year ago
Thank you for submitting this issue regarding the TFLM Arduino examples.
Your codebase appears to be out of date. The ErrorReporter
class was removed from TFLM. The MicroPrintf
method should now be used for all application logging. Please update from the official TFLM Arduino examples repository: https://github.com/tensorflow/tflite-micro-arduino-examples
The README for the tflite-micro-arduino-examples repository contains the commands to clone and update your local copy of the repository.
I am currently working on trying to run a quantized classification model using MNIST dataset on arduino nano 33 ble sense. While trying to compile my arduino sketch I'm getting this error. Can someone please help me. I have provided my sketch below
`#include "TensorFlowLite.h"
include "tensorflow/lite/micro/all_ops_resolver.h"
include "tensorflow/lite/micro/tflite_bridge/micro_error_reporter.h"
include "tensorflow/lite/micro/micro_interpreter.h"
include "tensorflow/lite/micro/system_setup.h"
include "tensorflow/lite/schema/schema_generated.h"
include "image_data.h"
include "model_data.h" / quantized model /
// Define the input shape and number of classes for the MNIST model const int kInputTensorSize = 1 28 28 1; const int kNumClasses = 10; namespace{ tflite::ErrorReporter error_reporter = nullptr; const tflite::Model model = nullptr; tflite::MicroInterpreter interpreter = nullptr; TfLiteTensor input = nullptr; TfLiteTensor output = nullptr; int inference_count = 0;
constexpr int kTensorArenaSize = 2*1024; uint8_t tensor_arena[kTensorArenaSize]; }
void setup() { Serial.begin(115200); tflite::InitializeTarget(); memset(tensor_arena, 0, kTensorArenaSize*sizeof(uint8_t));
// Set up logging. static tflite::MicroErrorReporter micro_error_reporter; error_reporter = µ_error_reporter;
// Map the model into a usable data structure.. model = tflite::GetModel(model_data); if (model->version() != TFLITE_SCHEMA_VERSION) { Serial.println("Model provided is schema version "
String(TFLITE_SCHEMA_VERSION)); return; } else { Serial.println("Model version: " + String(model->version())); }
// This pulls in all the operation implementations we need. static tflite::AllOpsResolver resolver;
// Build an interpreter to run the model with. static tflite::MicroInterpreter static_interpreter( model, resolver, tensor_arena, kTensorArenaSize, error_reporter); interpreter = &static_interpreter;
// Allocate memory from the tensor_arena for the model's tensors. TfLiteStatus allocate_status = interpreter->AllocateTensors(); if (allocate_status != kTfLiteOk) { Serial.println("AllocateTensors() failed"); return; } else { Serial.println("AllocateTensor() Success"); }
size_t used_size = interpreter->arena_used_bytes(); Serial.println("Area used bytes: " + String(used_size)); input = interpreter->input(0); output = interpreter->output(0);
/ check input / if (input->type != kTfLiteFloat32) { Serial.println("input type mismatch. expected input type is float32"); return; } else { Serial.println("input type is float32"); }
Serial.println("Model input:"); Serial.println("input->type: " + String(input->type)); Serial.println("dims->size: " + String(input->dims->size)); for (int n = 0; n < input->dims->size; ++n) { Serial.println("dims->data[n]: " + String(input->dims->data[n])); }
Serial.println("Model output:"); Serial.println("dims->size: " + String(output->dims->size)); for (int n = 0; n < output->dims->size; ++n) { Serial.println("dims->data[n]: " + String(output->dims->data[n])); }
} void loop() {
// Define the input image array const uint8_t kImageDataPtr = kImageData; // Pointer to start of image data uint8_t input_image[kInputTensorSize]; for (int i = 0; i < kInputTensorSize; i++) { input_image[i] = (kImageDataPtr++); }
for(int i=0; i<kInputTensorSize; i++){ input->data.f[i] = (float)input_image[i] / 255.0; }
// Run inference interpreter->Invoke();
// Print the predicted class int predicted_class = -1; float max_score = -1; for (int i = 0; i < kNumClasses; i++) { float score = output->data.f[i]; if (score > max_score) { predicted_class = i; max_score = score; } } Serial.println(predicted_class);
}`