c++ - protocol - google:: protobuf
Convertir el modelo de Keras a TensorFlow protobuf (4)
Actualmente estamos entrenando varias redes neuronales utilizando Keras, lo cual es ideal porque tiene una interfaz agradable y es relativamente fácil de usar, pero nos gustaría poder aplicarlas en nuestro entorno de producción.
Desafortunadamente, el entorno de producción es C ++, por lo que nuestro plan es:
- Utilice el backend TensorFlow para guardar el modelo en un protobuf
- Enlace nuestro código de producción a TensorFlow, y luego cargue en el protobuf
Desafortunadamente, no sé cómo acceder a las utilidades de guardado de TensorFlow desde Keras, que normalmente se guarda en HDF5 y JSON. ¿Cómo se guarda en protobuf?
En caso de que no necesite utilizar una GPU en el entorno en el que se está implementando, también podría usar mi biblioteca, llamada frugally-deep. Está disponible en GitHub y publicado bajo la licencia MIT: https://github.com/Dobiasd/frugally-deep
frugally-deep permite ejecutar pases hacia adelante en modelos Keras ya entrenados directamente en C ++ sin la necesidad de vincularse con TensorFlow o cualquier otro backend.
Esto parece ser respondido en "Keras como una interfaz simplificada para TensorFlow: tutorial" , publicado en El blog de Keras por Francois Chollet.
En particular, la sección II, "Uso de modelos Keras con TensorFlow" .
Guarda tu modelo keras como un archivo HDF5.
A continuación, puede hacer la conversión con el siguiente código:
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''))
Aquí está mi código de muestra que maneja múltiples entradas y múltiples casos de salida: https://github.com/amir-abdi/keras_to_tensorflow
Puede acceder al backend TensorFlow por:
import keras.backend.tensorflow_backend as K
Luego puede llamar a cualquier utilidad o función TensorFlow como:
K.tf.ConfigProto