私はKerano(Theano)を使用してCNNモデルをトレーニングしています。誰も私のC++アプリケーションでどのように使用できるのか考えていますか?誰かが何か似たようなことを試みましたか私は、ネットワーク機能を持つC++コードを生成するいくつかのPythonコードを書く考えがあります。KerasモデルをC++に変換する
私は同様の質問を見つけました。here Tensorflow KerasモデルをC++で使用しますが、答えはありません。
私はKerano(Theano)を使用してCNNモデルをトレーニングしています。誰も私のC++アプリケーションでどのように使用できるのか考えていますか?誰かが何か似たようなことを試みましたか私は、ネットワーク機能を持つC++コードを生成するいくつかのPythonコードを書く考えがあります。KerasモデルをC++に変換する
私は同様の質問を見つけました。here Tensorflow KerasモデルをC++で使用しますが、答えはありません。
私自身の質問に答えて解決策を見つけるために、keras2cpp(コードはgithubで利用可能)と呼ばれる単純なC++ソリューションを作成しました。
このソリューションでは、ネットワークアーキテクチャ(json)と重み(hdf5)を格納します。その後、提供されたスクリプトを使用してネットワークをプレーンテキストファイルにダンプすることができます。純粋なC++コードでネットワークで取得したテキストファイルを使用することができます。 Pythonライブラリやhdf5には依存しません。それはtheanoとtensorflowバックエンドで動作するはずです。
申し訳ありませんが、既に訓練されたモデルを導入したいとは思わなかったのです。その場合、これは良い解決策です。 –
最も簡単な方法は、おそらく予測をバイナリまたはHDF5ファイルに書き込むPythonスクリプトをシステムコールすることです。これはC++から読み込むことができます。 directly integrate Python into C++も可能です。
あなたはこれを簡単に展開して配布する必要がある場合は、あなたがAnacondaのような自己完結型のPythonインストールに見ることができますが、あなたの最善の策はKerasを避け、CaffeまたはTensorflowにC++インタフェースを使用することであってもよいです。 TensorflowはC++からの使用は標準ではないため、推奨しません。 this discussionを参照してください。 Caffeは間違いなくsecond most-popular deep learning libraryですので、本当に間違ってはいけません。
私は同様の必要性を持っていた - 私はC++アプリケーションでKerasモデルを埋め込むしたい - と、私自身のライブラリを書くことにしました:KerasifyのKerasify
設計目標:イメージと
例コード、単体テスト、等。完全には完了していませんが、使用しているKeras関数の狭いサブセットのみをサポートしていますが、少しの努力で拡張可能でなければなりません。
あなたkerasモデルがtensorflowバックエンドを使用して訓練を受けている場合は、このコードに続くtensorflowモデルとしてkerasモデルを保存することができます
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
は、コードの短いバージョンですここにあるソリューションは非常に優れていますが、モデルにこれらのライブラリでサポートされていないいくつかの異なるタイプのレイヤーがある場合は、以下を実行することをお勧めします:
あなたはbazelよりも(例えばG ++のように)別のコンパイラを使用したい場合は、この偉大なtuturial従うことができます:
http://tuatini.me/building-tensorflow-as-a-standalone-project/
私は似たような状況で自分自身を発見しただけでなく、ために必要がC++の逐次Kerasモデルの順方向パスをサポートしますが、functional APIを使用して構築したより複雑なモデルもサポートしています。
私はfrugally-deepという新しいライブラリを作成しました。 https://github.com/Dobiasd/frugally-deep
さらに、多くの一般的なレイヤータイプをサポートすることで、単一のCPUでTensorFlowのパフォーマンスに追いつくことができます。 repoには、いくつかの一般的なモデルの最新のベンチマーク結果が掲載されています。 C++でそれを使用するモデルの出力が正確にPythonでKerasで実行した場合と同じであることを自動テスト倹約-深い保証することで
。
@akarsakov詳細をお聞かせください。 –
@ 1 ''申し訳ありませんが、私は賞金に間違った理由を選んだのです。私はC++コードでKerasモデルを使用するためのより生産的な方法の方がより簡単か、より適していると思っています。 – akarsakov
@akarsakov HDF5 +システムコールソリューションに問題がありますか? –