Ответ 1
Кажется, что ответ в "Keras как упрощенный интерфейс к TensorFlow: учебник" , опубликованный в блоге Keras от Франсуа Холле.
В частности, раздел II, "Использование моделей Keras с TensorFlow" .
В настоящее время мы изучаем различные нейронные сети, использующие Keras, что идеально, потому что имеет приятный интерфейс и относительно прост в использовании, но мы хотели бы применять их в нашей производственной среде.
К сожалению, производственная среда - С++, поэтому наш план состоит в следующем:
К сожалению, я не знаю, как получить доступ к утилитам экономии TensorFlow от Keras, которые обычно сохраняются в HDF5 и JSON. Как сохранить в protobuf?
Кажется, что ответ в "Keras как упрощенный интерфейс к TensorFlow: учебник" , опубликованный в блоге Keras от Франсуа Холле.
В частности, раздел II, "Использование моделей Keras с TensorFlow" .
Вы можете получить доступ к серверу TensorFlow:
import keras.backend.tensorflow_backend as K
Затем вы можете вызвать любую утилиту TensorFlow или функцию, например:
K.tf.ConfigProto
Если вам не нужно использовать GPU в среде, в которую вы развертываете, вы также можете использовать мою библиотеку, называемую экономно. Он доступен на GitHub и опубликован под лицензией MIT: https://github.com/Dobiasd/frugally-deep
бережливость позволяет запускать переходы на уже обученных моделях Keras непосредственно на С++ без необходимости связывания с TensorFlow или любым другим backend.
Сохраните модель keras как файл HDF5.
Затем вы можете выполнить преобразование с помощью следующего кода:
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'))
Вот мой пример кода, который обрабатывает несколько случаев ввода и множественного вывода: https://github.com/amir-abdi/keras_to_tensorflow