TensorFlow、モデルを保存した後に3つのファイルがあるのはなぜですか?


113

ドキュメントを読んだ後、モデルをに保存しTensorFlowました。これが私のデモコードです。

# Create some variables.
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
# Add an op to initialize the variables.
init_op = tf.global_variables_initializer()

# Add ops to save and restore all the variables.
saver = tf.train.Saver()

# Later, launch the model, initialize the variables, do some work, save the
# variables to disk.
with tf.Session() as sess:
  sess.run(init_op)
  # Do some work with the model.
  ..
  # Save the variables to disk.
  save_path = saver.save(sess, "/tmp/model.ckpt")
  print("Model saved in file: %s" % save_path)

しかしその後、私は3つのファイルがあることを発見しました

model.ckpt.data-00000-of-00001
model.ckpt.index
model.ckpt.meta

またmodel.ckpt、そのようなファイルがないため、ファイルを復元してもモデルを復元できません。これが私のコードです

with tf.Session() as sess:
  # Restore variables from disk.
  saver.restore(sess, "/tmp/model.ckpt")

では、なぜ3つのファイルがあるのでしょうか。


2
これに対処する方法を理解しましたか?(Kerasを使用して)モデルを再度ロードするにはどうすればよいですか?
rajkiran 2017年

回答:


116

これを試して:

with tf.Session() as sess:
    saver = tf.train.import_meta_graph('/tmp/model.ckpt.meta')
    saver.restore(sess, "/tmp/model.ckpt")

TensorFlow saveメソッドは、グラフ構造を変数値とは別に保存するため、3種類のファイルを保存します.metaあなたは(それ以外の場合は、保存されたチェックポイントの値がに対応してどのような変数を知らない)チェックポイントを復元する前に、それをインポートする必要があるように、ファイルは、保存されたグラフ構造を記述する。

または、次のようにすることもできます。

# Recreate the EXACT SAME variables
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")

...

# Now load the checkpoint variable values
with tf.Session() as sess:
    saver = tf.train.Saver()
    saver.restore(sess, "/tmp/model.ckpt")

という名前のファイルはありませんがmodel.ckpt、復元するときに、保存されたチェックポイントをその名前で参照します。saver.pyソースコードから:

ユーザーが操作する必要があるのは、物理パス名ではなく、ユーザー指定のプレフィックスを使用することだけです。


1
.indexと.dataは使用されませんか?これらの2つのファイルはいつ使用されますか?
ajfbiw.s 2017年

26
@ ajfbiw.s .metaはグラフ構造を格納し、.dataはグラフ内の各変数の値を格納し、.indexはチェックピオントを識別します。したがって、上記の例では、import_meta_graphは.metaを使用し、saver.restoreは.dataおよび.indexを使用します
TK Bartel

ああなるほど。ありがとう。
ajfbiw.s 2017年

1
ロードに使用しているものとは異なるバージョンのTensorFlowでモデルを保存した可能性はありますか?(github.com/tensorflow/tensorflow/issues/5639
TKバーテル

5
誰もがいることを知っているん 0000000001数字が意味ですか?でvariables.data-?????-of-?????、ファイル
イワンTalalaev

55
  • メタファイル:保存されたグラフ構造を記述し、GraphDef、SaverDefなどを含みます。次に、適用しtf.train.import_meta_graph('/tmp/model.ckpt.meta')、復元SaverGraphます。

  • インデックスファイル:文字列と文字列の不変のテーブルです(tensorflow :: table :: Table)。各キーはテンソルの名前であり、その値はシリアル化されたBundleEntryProtoです。各BundleEntryProtoは、テンソルのメタデータを記述します。どの「データ」ファイルにテンソルのコンテンツが含まれるか、そのファイルへのオフセット、チェックサム、いくつかの補助データなどが含まれます。

  • データファイル:TensorBundleコレクションであり、すべての変数の値を保存します。


画像分類用のpbファイルを入手しました。リアルタイムのビデオ分類に使用できますか?

Keras 2を使用して、3つのファイルとして保存されているモデルをどのようにロードしますか?
rajkiran 2017年

5

Word2Vec tensorflowチュートリアルからトレーニング済みの単語埋め込みを復元しています。

複数のチェックポイントを作成した場合:

たとえば、作成されたファイルは次のようになります

model.ckpt-55695.data-00000-of-00001

model.ckpt-55695.index

model.ckpt-55695.meta

これを試して

def restore_session(self, session):
   saver = tf.train.import_meta_graph('./tmp/model.ckpt-55695.meta')
   saver.restore(session, './tmp/model.ckpt-55695')

restore_session()を呼び出すとき:

def test_word2vec():
   opts = Options()    
   with tf.Graph().as_default(), tf.Session() as session:
       with tf.device("/cpu:0"):            
           model = Word2Vec(opts, session)
           model.restore_session(session)
           model.get_embedding("assistance")

「model.ckpt-55695.data-00000-of-00001」の「00000-of-00001」とはどういう意味ですか?
hafiz031

0

たとえば、ドロップアウトを使用してCNNをトレーニングした場合、これを行うことができます。

def predict(image, model_name):
    """
    image -> single image, (width, height, channels)
    model_name -> model file that was saved without any extensions
    """
    with tf.Session() as sess:
        saver = tf.train.import_meta_graph('./' + model_name + '.meta')
        saver.restore(sess, './' + model_name)
        # Substitute 'logits' with your model
        prediction = tf.argmax(logits, 1)
        # 'x' is what you defined it to be. In my case it is a batch of RGB images, that's why I add the extra dimension
        return prediction.eval(feed_dict={x: image[np.newaxis,:,:,:], keep_prob_dnn: 1.0})
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.