web-dev-qa-db-fra.com

Conversion du modèle Keras en TensorFlow protobuf

Nous formons actuellement divers réseaux de neurones à l’aide de Keras, ce qui est idéal car elle possède une interface agréable et est relativement facile à utiliser, mais nous aimerions pouvoir les appliquer dans notre environnement de production. 

Malheureusement, l’environnement de production étant en C++, notre plan est le suivant:

  • Utilisez le backend TensorFlow pour enregistrer le modèle dans un fichier prototype
  • Liez notre code de production à TensorFlow, puis chargez-le dans le protobuf

Malheureusement, je ne sais pas comment accéder aux utilitaires de sauvegarde TensorFlow de Keras, qui enregistre normalement sur HDF5 et JSON. Comment puis-je sauvegarder sur protobuf?

20
Shep

Au cas où vous n’auriez pas besoin d’utiliser un GPU dans l’environnement dans lequel vous vous déployez, vous pouvez également utiliser ma bibliothèque, appelée frugally-deep. Il est disponible sur GitHub et publié sous la licence MIT: https://github.com/Dobiasd/frugally-deep

frugally-deep permet d'exécuter des passes directes sur des modèles Keras déjà formés directement en C++, sans qu'il soit nécessaire d'établir une liaison avec TensorFlow ou tout autre système.

5
Tobias Hermann

Ceci semble être résolu dans "Keras comme une interface simplifiée à TensorFlow: tutorial" , posté sur Le blog de Keras par Francois Chollet.

En particulier, section II, "Utilisation des modèles Keras avec TensorFlow" .

4
Louis M

Vous pouvez accéder au backend TensorFlow par:

import keras.backend.tensorflow_backend as K

Ensuite, vous pouvez appeler n’importe quel utilitaire ou fonction TensorFlow comme suit:

K.tf.ConfigProto
3
Ahmed

Enregistrez votre modèle de keras en tant que fichier HDF5.

Vous pouvez ensuite faire la conversion avec le code suivant:

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'))

Voici mon exemple de code qui traite plusieurs cas d'entrée et de sortie: https://github.com/amir-abdi/keras_to_tensorflow

2
AHA