現在、Kerasを使用してさまざまなニューラルネットワークをトレーニングしています。これは、Niceインターフェースがあり、比較的使いやすいので理想的ですが、本番環境に適用できるようにしたいと考えています。
残念ながら、本番環境はC++であるため、私たちの計画は次のとおりです。
残念ながら、KerasからTensorFlow保存ユーティリティにアクセスする方法がわかりません。Kerasは通常、HDF5とJSONに保存します。どうすればprotobufに保存できますか?
デプロイ先の環境でGPUを使用する必要がない場合は、frugally-deepと呼ばれる私のライブラリを使用することもできます。 GitHubで入手でき、MIT License: https://github.com/Dobiasd/frugally-deep の下で公開されています
質素なディープにより、TensorFlowや他のバックエンドとリンクする必要なく、C++で直接トレーニング済みのKerasモデルでフォワードパスを実行できます。
これは "TeraFlowへの簡略化されたインターフェースとしてのケラス:チュートリアル" で回答されているようですThe Kerasブログフランソワチョレ。
TensorFlowバックエンドには次の方法でアクセスできます。
import keras.backend.tensorflow_backend as K
次に、次のようなTensorFlowユーティリティまたは関数を呼び出すことができます。
K.tf.ConfigProto
ケラスモデルを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
kerasバックエンドの学習フェーズを変更して、レイヤーの適切な値(ドロップアウトやバッチ正規化など)を保存するようにしてください。これについては ディスカッション です。