what protocol protobuf google buffers c++ protocol-buffers tensorflow keras

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.



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