TensorFlow ニューラル協調フィルタリング・モデルの変換

危険

ここで説明されているコードは非推奨になりました。従来のソリューションの適用を避けるため使用しないでください。下位互換性を確保するためにしばらく保持されますが、最新のアプリケーションでは使用してはなりません

このガイドでは、非推奨となった変換方法について説明します。新しい推奨方法に関するガイドは、Python チュートリアルに記載されています。

このチュートリアルでは、ニューラル協調フィルタリング (NCF) モデルを OpenVINO 中間表現に変換する方法について説明します。

パブリックな TensorFlow NCF モデルには、事前トレーニングされた重みが含まれていません。このモデルを IR に変換するには以下を行います。

  1. このリポジトリーの手順でモデルをトレーニングします。

  2. TensorFlow モデルの変換ガイドPython でのカスタムモデルのフリーズの手順に従って、前のステップで取得した推論グラフを model_dir にフリーズします。

    次のコマンドを実行します。

     import tensorflow as tf
     from tensorflow.python.framework import graph_io
    
     sess = tf.compat.v1.Session()
     saver = tf.compat.v1.train.import_meta_graph("/path/to/model/model.meta")
     saver.restore(sess, tf.train.latest_checkpoint('/path/to/model/'))
    
     frozen = tf.compat.v1.graph_util.convert_variables_to_constants(sess, sess.graph_def, \
                                                         ["rating/BiasAdd"])
     graph_io.write_graph(frozen, './', 'inference_graph.pb', as_text=False)
    

    ここで、rating/BiasAdd は出力ノードです。

  3. モデルを OpenVINO 形式に変換します。フリーズしたモデルを見ると、4 つの ResourceGather レイヤーに分割された 1 つの入力があることが分かります (クリックしてイメージを拡大)。

    ../../../../../../_images/NCF_start.svg

    ただし、モデル変換 API はそのようなデータフィードをサポートしていないため、スキップする必要があります。ResourceGather のポート 1 に入るエッジをカットします。

    mo --input_model inference_graph.pb                    \
    --input 1:embedding/embedding_lookup,1:embedding_1/embedding_lookup, \
    1:embedding_2/embedding_lookup,1:embedding_3/embedding_lookup        \
    --input_shape [256],[256],[256],[256]                                \
    --output_dir <OUTPUT_MODEL_DIR>
    

    input_shape パラメーターで、256 はモデルの batch_size を指定します。

または、ステップ 2 と 3 を 1 つのコマンドラインで実行することもできます。

mo --input_meta_graph /path/to/model/model.meta        \
--input 1:embedding/embedding_lookup,1:embedding_1/embedding_lookup, \
1:embedding_2/embedding_lookup,1:embedding_3/embedding_lookup        \
--input_shape [256],[256],[256],[256] --output rating/BiasAdd        \
--output_dir <OUTPUT_MODEL_DIR>