2016-04-04 154 views
15

我們目前正在使用Keras來培訓各種神經網絡,這是理想的,因爲它有一個很好的界面並且相對易於使用,但我們希望能夠將它們應用到我們的生產中環境。將Keras模型轉換爲TensorFlow protobuf

不幸的是,生產環境是C++,所以我們的計劃是:

  • 使用TensorFlow後端模型保存到protobuf的
  • 鏈接我們的生產代碼TensorFlow,然後在protobuf的加載

不幸的是,我不知道如何從Keras訪問TensorFlow保存實用程序,它通常保存爲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

在你不需要的情況下在您正在部署的環境中使用GPU,您也可以使用我的庫,稱爲節儉深度。它可以在GitHub上獲得並在MIT許可證下發布:https://github.com/Dobiasd/frugally-deep

節儉的深度允許直接使用C++在已經訓練好的Keras模型上運行正向傳遞,而無需鏈接到TensorFlow或任何其他後端。

+0

任何支持RNN的計劃?與處理RNN(但不是卷積)的[lwtnn](https://github.com/lwtnn/lwtnn)有趣的重疊。 – Shep

+0

@Shep我希望將來能夠支持他們,但是我還沒有爲此計劃一個計劃。 –

相關問題