web-dev-qa-db-ja.com

TensorFlowモデルを提供可能な形式に変換する

Tensorflowサービングドキュメントに従って、トレーニング済みモデルをDockerコンテナで提供できる形式に変換します。私はTensorflowを初めて使用するため、このトレーニング済みモデルを提供に適した形式に変換するのに苦労しています。

モデルはすでにトレーニングされており、チェックポイントファイルと.metaファイルがあります。したがって、上記の2つのファイルから.pbファイルと変数フォルダーを取得する必要があります。誰もが私にモデルを提供するためにこれを行う方法についてのアプローチを提案できますか?

.
|-- tensorflow model
|       -- 1
|       |-- saved_model.pb
|       -- variables
|           |-- variables.data-00000-of-00001
|           -- variables.index
5
Ashish

あなたの質問から、モデルにアクセスできなくなり、Check Point files.meta filesしかないということですか?

その場合は、これらのファイルを'.pb' fileに変換するためのコードがある以下のリンクを参照してください。

Tensorflow:.meta、.data、および.indexモデルファイルを1つのgraph.pbファイルに変換する方法

https://github.com/petewarden/tensorflow_makefile/blob/master/tensorflow/python/tools/freeze_graph.py

トレーニング済みモデルにアクセスできる場合は、現在tf.train.Saverを使用してモデルを保存していると思います。その代わりに、下記の3つの(一般的に使用される)関数のいずれかを使用してモデルを保存し、エクスポートすることができます。

  1. tf.saved_model.simple_save =>この場合、配信中はPredict APIのみがサポートされます。この例は、KrisR89の回答で言及されています。

  2. tf.saved_model.builder.SavedModelBuilder =>この場合、SigningDefs、つまり検索中にアクセスするAPIを定義できます。以下のリンクで使用方法の例を見つけることができます https://github.com/tensorflow/serving/blob/master/tensorflow_serving/example/mnist_saved_model.py

  3. 3番目の方法を以下に示します。

    classifier = tf.estimator.DNNClassifier(config = training_config、feature_columns = feature_columns、hidden_​​units = [256、32]、optimizer = tf.train.AdamOptimizer(1e-4)、n_classes = NUM​​_CLASSES、dropout = 0.1、model_dir = FLAGS.model_dir )

    classifier.export_savedmodel(FLAGS.saved_dir、

    serve_input_receiver_fn = serving_input_receiver_fn)

Estimatorを使用してモデルを保存する方法の例は、以下のリンクにあります。これは、予測および分類APIをサポートします。

https://github.com/yu-iskw/tensorflow-serving-example/blob/master/python/train/mnist_premodeled_estimator.py

この情報が役立つか、またはさらにサポートが必要かどうかをお知らせください。

1

これが役に立てば幸いです:

import tensorflow as tf
from tensorflow.contrib.keras import backend as K
from tensorflow.python.client import device_lib

K.set_learning_phase(0)
model = tf.keras.models.load_model('my_model.h5')


export_path = './'
with K.get_session() as sess:
    tf.saved_model.simple_save(
        sess,
        export_path,
        inputs={'input_image': model.input},
        outputs={t.name: t for t in model.outputs}
    )
    print('Converted to SavedModel!!!')
0
Yesken