-
• #2
Hi -
tf.getInput()
actually gives you a 1D array, so what you'd be doing withtf.getInput()[0] = input_array
is casting input_array to a single integer and writing it to the first element.Probably what you want is just:
tf.getInput().set(input_array)
Also tflite has standard get_tensor and set_tensor functions in interpreter to set the input data in proper format. I cannot see those functions in banglejs after loading the tflite model.
They don't exist in Espruino - you just get
tf.getInput/Output
that do the formatting for you. Right now there's no support for multiple tensors of different types - you just get access to the first input and output one -
• #3
Hi @Gordon thanks for the reply
so you mean my model input should be always a flat 1D array and then internal conversion should be made while creating model. Currently the my input_array is 4D array so can i directly input this to the model or should i recreate my model to take only 1D array inputs. -
• #4
I'm not entirely sure it matters. Even if you specify a 4D array, I believe internally Tensorflow flattens it into a 1D array which is what you see in Espruino, so it shouldn't matter too much.
However, if you used a 1D array from the start, it might be less confusing as then it's very explicit what each part of the input represents
-
• #5
var tf = require("tensorflow").create(3072, model); function get_data(a){ var d = [Math.round(a.x*100),Math.round(a.y*100),Math.round(a.z*100)]; input_array.push(d); if (input_array.length > SAMPLE_SIZE-1){ var row_array = []; var time_step_array = []; var final_input = []; var depth_array = []; for (i=0; i<input_array.length;i++){ row_array = []; depth_array = []; for (j=0;j<input_array[0].length;j++){ depth_array.push(input_array[i][j]); } row_array.push(depth_array); time_step_array.push(row_array); } final_input.push(time_step_array); tf.getInput().set(final_input); //Terminal.println(tf.getInput()); tf.invoke(); Terminal.println(tf.getOutput()); input_array = []; } } Bangle.on('accel', get_data);
This is my code and my model takes input as array i am always getting the same output when printed. I am pretty sure there is no problem in model as i loaded the tflite model and tested the output in my desktop and it is working fine.
-
• #6
Maybe you could print the contents of
final_input
?The way you're doing
final_input.push(time_step_array);
makes me think you might be ending up with an array of arrays, rather than just a single flat 1D array. You probably need to useconcat
for that - or ideally to usetf.getInput().set(sub_array, offset);
I have a tflite model which expects the input to be in int8 datatype
I have loaded my data in the same shape as my model expects but when i print (tf.getInput()[0] ) it always shows zero even when input_array has values. I have encoded my model with base64. Can anyone help me out @Gordon please help me out here
Also tflite has standard get_tensor and set_tensor functions in interpreter to set the input data in proper format. I cannot see those functions in banglejs after loading the tflite model.