Подтвердить что ты не робот

TensorFlow, почему есть 3 файла после сохранения модели?

Прочитав docs, я сохранил модель в 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 файла?

4b9b3361

Ответ 1

Попробуйте следующее:

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

Метод сохранения TensorFlow сохраняет три типа файлов, поскольку он сохраняет структуру графика отдельно от значений переменной . Файл .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 исходного кода: "Пользователям нужно только взаимодействовать с указанным пользователем префиксом... вместо любого физического пути".

Ответ 2

  • метафайл: описывает сохраненную структуру графика, включая GraphDef, SaverDef и т.д.; затем примените tf.train.import_meta_graph('/tmp/model.ckpt.meta'), восстановите Saver и Graph.

  • индексный файл: это неизменяемая таблица строковой строки (tensorflow:: table:: Table). Каждый ключ является именем тензора, а его значение является сериализованным BundleEntryProto. Каждый BundleEntryProto описывает метаданные тензора: какой из "данных" содержит содержимое тензора, смещение в этот файл, контрольную сумму, некоторые вспомогательные данные и т.д.

  • файл данных: это коллекция TensorBundle, сохраняющая значения всех переменных.

Ответ 3

Я восстанавливаю обучаемые словарные вставки из Word2Vec учебник по тенгорам.

Если вы создали несколько контрольных точек:

например. создаваемые файлы выглядят следующим образом

model.ckpt-55695.data-00000-оф-00001

model.ckpt-55695.index

model.ckpt-55695.meta​​p >

попробуйте это

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")