1

I need to have a frozen graph (GrafDef file) while using Tensorflow 2.X. That is because I use a tool which expects a frozen graph, however, my training needed to be done on TF2.X and Keras.


I tried many different ways to save my TF2 model. The variant with which I was able to get the most useful formats is the following:

sess = tf.compat.v1.Session()
saver = tf.compat.v1.train.Saver(var_list=cnn.trainable_variables)
save_path = saver.save(sess, os.path.join(CHKPT_DIR, CHKPT_FILE))
tf.compat.v1.train.write_graph(sess.graph_def, CHKPT_DIR, TRAIN_GRAPH, as_text=False)

That way I was able to get the following files:

  • float_model.ckpt.data-00000-of-00001
  • float_model.ckpt.index
  • checkpoint
  • training_model.pb

Of these files I need the *.ckpt and training_model.pb to freeze my model. However, when using the freeze_graph.sh (with TF1.X, different virtual environment), it throws the error

ValueError: No variables to save

This is although I give it the variables as a list via var_list=cnn.trainable_variables. cnn.trainable_variables also is not empty and seems to have all the used variables of my model.


Thus, I tried using the following method, according to TF2.X standards (assuming cnn is my model):

cnn.save(CHKPT_PATH)
checkpoint = tf.train.Checkpoint(cnn)
save_path = checkpoint.save(CHKPT_PATH)

Here I get the following files:

  • float_model.ckpt-1.data-00000-of-00001
  • float_model.ckpt-1.index
  • checkpoint
  • floating_model.ckpt/keras_metadata.pb
  • floating_model.ckpt/saved_model.pb
  • floating_model.ckpt/assets
  • floating_model.ckpt/variables

But here is where I get confused. Is there some kind of frozen graph available already? Or is there some kind of equivalent in here? And if not, how to get it with TF2.X if possible? I found the sentence

The .save() method is already saving a *.pb ready for inference.

in this post. So the frozen graph is ready for inference, and thus one of these files must be equivalent to a frozen graph, right?

Vandrey
  • 531
  • 1
  • 8
  • 23

0 Answers0