Конвертировать модель Keras в прототип TensorFlow

В настоящее время мы обучаем различные нейронные сети с использованием Keras, что идеально, поскольку он имеет приятный интерфейс и относительно прост в использовании, но мы хотели бы иметь возможность применять их в нашей производственной среде.

К сожалению, производственная среда — C ++, поэтому мы планируем:

  • Используйте бэкэнд TensorFlow для сохранения модели в protobuf
  • Свяжите наш производственный код с TensorFlow, а затем загрузите в protobuf

К сожалению, я не знаю, как получить доступ к утилитам сохранения TensorFlow из Keras, который обычно сохраняет в HDF5 и JSON. Как сохранить в protobuf?

20

Решение

Если вам не нужно использовать графический процессор в среде, в которой вы развертываете, вы также можете использовать мою библиотеку, которая называется экономно-глубокая. Он доступен на GitHub и опубликован под лицензией MIT: https://github.com/Dobiasd/frugally-deep

экономно-глубокий позволяет запускать проходы по уже обученным моделям Keras непосредственно в C ++ без необходимости связываться с TensorFlow или любым другим бэкэндом.

5

Другие решения

Это, кажется, ответили в «Keras как упрощенный интерфейс для TensorFlow: учебник», опубликовано Блог Кераса Франсуа Шоле.

Особенно, Раздел II, «Использование моделей Keras с TensorFlow».

4

Вы можете получить доступ к бэкенду TensorFlow:

import keras.backend.tensorflow_backend as K

Затем вы можете вызвать любую утилиту или функцию TensorFlow, например:

K.tf.ConfigProto
3

Сохраните вашу модель 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

2
По вопросам рекламы [email protected]