Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Obtain input_array and output_array items to convert model to tflite format

PS. Please dont point me to converting Keras model directly to tflite as my .h5 file would fail to convert to .tflite directly. I somehow managed to convert my .h5 file to .pb

I have followed this Jupyter notebook for face recognition using Keras. I then saved my model to a model.h5 file, then converted it to a frozen graph, model.pb using this.

Now I want to use my tensorflow file in Android. For this I will need to have Tensorflow Lite, which requires me to convert my model into a .tflite format.

For this, I'm trying to follow the official guidelines for it here. As you can see there, it requires input_array and output_array arrays. How do I obtain details of these things from my model.pb file?

like image 636
Sparker0i Avatar asked Feb 02 '19 17:02

Sparker0i


1 Answers

input arrays and output arrays are the arrays which store input and output tensors respectively.

They intend to inform the TFLiteConverter about the input and output tensors which will be used at the time of inference.

For a Keras model,

The input tensor is the placeholder tensor of the first layer.

input_tensor = model.layers[0].input

The output tensor may relate with a activation function.

output_tensor = model.layers[ LAST_LAYER_INDEX ].output

For a Frozen Graph,

import tensorflow as tf
gf = tf.GraphDef()   
m_file = open('model.pb','rb')
gf.ParseFromString(m_file.read())

We get the names of the nodes,

for n in gf.node:
    print( n.name )

To get the tensor,

tensor = n.op

The input tensor may be a placeholder tensor. Output tensor is the tensor which you run using session.run()

For conversion, we get,

input_array =[ input_tensor ]
output_array = [ output_tensor ]
like image 135
Shubham Panchal Avatar answered Sep 29 '22 11:09

Shubham Panchal