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:
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?
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.
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" .
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
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