TensorFlow ニューラル協調フィルタリング・モデルの変換¶
危険
ここで説明されているコードは非推奨になりました。従来のソリューションの適用を避けるため使用しないでください。下位互換性を確保するためにしばらく保持されますが、最新のアプリケーションでは使用してはなりません。
このガイドでは、非推奨となった変換方法について説明します。新しい推奨方法に関するガイドは、Python チュートリアルに記載されています。
このチュートリアルでは、ニューラル協調フィルタリング (NCF) モデルを OpenVINO 中間表現に変換する方法について説明します。
パブリックな TensorFlow NCF モデルには、事前トレーニングされた重みが含まれていません。このモデルを IR に変換するには以下を行います。
このリポジトリーの手順でモデルをトレーニングします。
-
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
は出力ノードです。 -
モデルを OpenVINO 形式に変換します。フリーズしたモデルを見ると、4 つの
ResourceGather
レイヤーに分割された 1 つの入力があることが分かります (クリックしてイメージを拡大)。ただし、モデル変換 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>