1. ホーム
  2. tensorflow

[解決済み] TensorFlow、モデル保存後に3つのファイルが存在するのはなぜか?

2022-07-05 23:21:45

質問

このページでは ドキュメント を読んで、モデルを 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つのファイルがあるのでしょうか?

どのように解決するのですか?

これを試してみてください。

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

TensorFlowの保存メソッドは、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 ソースコード :

ユーザーは、物理的なパス名ではなく、ユーザーが指定したプレフィックス...を操作する必要があるだけです。 を操作するだけです。