2016-04-04 4 views
15

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

К сожалению, производственная среда является C++, так что наш план заключается в следующем:

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

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

+1

Не знаком с Keras, но если он использует график по умолчанию, вы можете получить protobuf как 'tf.get_default_graph(). As_graph_def()' –

ответ

3

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

import keras.backend.tensorflow_backend as K 

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

K.tf.ConfigProto 
-1

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

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

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

+0

Любые планы поддержки RNN? Интересное совпадение с [lwtnn] (https://github.com/lwtnn/lwtnn), которое обрабатывает RNN (но не свертки). – Shep

+0

@Shep Я хотел бы поддержать их в будущем, но у меня пока нет запланированного графика. –

Смежные вопросы