2016-04-04 36 views
15

私たちは現在、Kerasを使用して様々なニューラルネットワークをトレーニングしています。これは、インターフェイスが使いやすく、使いやすいという理由から理想的ですが、環境。KerasモデルをTensorFlowに変換するprotobuf

我々の計画は、にあるので、残念ながら、本番環境は、C++である:

  • がTen​​sorFlowに当社の生産コードをリンクして、いるProtobufに読み込むいるProtobufにモデルを保存するためにTensorFlowバックエンドを使用し

    残念ながら、通常はHDF5とJSONに保存されるKerasからTensorFlow保存ユーティリティにアクセスする方法はわかりません。 protobufにどのように保存しますか?

  • +1

    Kerasには慣れていませんが、デフォルトグラフを使用している場合は、protobufを 'tf.get_default_graph()。as_graph_def()'として入手できます。 –

    答えて

    3

    次の方法でTensorFlowのバックエンドにアクセスすることができます。そして、あなたが好きなTensorFlowユーティリティまたは関数を呼び出すことができ

    import keras.backend.tensorflow_backend as K 
    

    :これは"Keras as a simplified interface to TensorFlow: tutorial"に答えているように見える

    K.tf.ConfigProto 
    
    -1

    ケラスモデルを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を利用すると、私のライブラリを使用することもできます。 https://github.com/Dobiasd/frugally-deep

    frugally-deepでは、すでに訓練されたKerasモデルをC++で直接実行することができ、TensorFlowや他のバックエンドとリンクする必要はありません。

    +0

    RNNをサポートする予定はありますか? RNNを扱う(畳み込みではない)[lwtnn](https://github.com/lwtnn/lwtnn)と面白いオーバーラップ。 – Shep

    +0

    @Shep将来私はそれらをサポートしたいと思いますが、私はまだ予定していません。 –

    関連する問題