Convert Keras model to TensorFlow protobuf

匿名 (未验证) 提交于 2019-12-03 02:49:01

问题:

We're currently training various neural networks using Keras, which is ideal because it has a nice interface and is relatively easy to use, but we'd like to be able to apply them in our production environment.

Unfortunately the production environment is C++, so our plan is to:

  • Use the TensorFlow backend to save the model to a protobuf
  • Link our production code to TensorFlow, and then load in the protobuf

Unfortunately I don't know how to access the TensorFlow saving utilities from Keras, which normally saves to HDF5 and JSON. How do I save to protobuf?

回答1:

This seems to be answered in "Keras as a simplified interface to TensorFlow: tutorial", posted on The Keras Blog by Francois Chollet.

In particular, section II, "Using Keras models with TensorFlow".



回答2:

You can access TensorFlow backend by:

import keras.backend.tensorflow_backend as K 

Then you can call any TensorFlow utility or function like:

K.tf.ConfigProto 


回答3:

In case you don't need to utilize a GPU in the environment you are deploying to, you could also use my library, called frugally-deep. It is available on GitHub and published under the MIT License: https://github.com/Dobiasd/frugally-deep

frugally-deep allows running forward passes on already-trained Keras models directly in C++ without the need to link against TensorFlow or any other backend.



回答4:

Save your keras model as an HDF5 file.

You can then do the conversion with the following code:

from keras import backend as K from tensorflow.python.framework import graph_util from tensorflow.python.framework import graph_io  weight_file_path = 'path to your keras model' net_model = load_model(weight_file_path) sess = K.get_session()  constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph.as_graph_def(), 'name of the output tensor') graph_io.write_graph(constant_graph, 'output_folder_path', 'output.pb', as_text=False) print('saved the constant graph (ready for inference) at: ', osp.join('output_folder_path', 'output.pb')) 

Here is my sample code which handles multiple input and multiple output cases: https://github.com/amir-abdi/keras_to_tensorflow



回答5:

Converting Keras(.h5) model to Tensorflow(.pb) model is done with this little code.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!