Tensorflow: Какая связь между файлом.ckpt и.ckpt.meta и.ckpt.index и.pb

Я использовал saver=tf.train.Saver() чтобы сохранить модель, которую я обучил, и я получаю три типа файлов с именем:

  • .ckpt.meta
  • .ckpt.index
  • .ckpt.data

И файл называется:

  • контрольно-пропускной пункт

Какая связь с файлом .ckpt?

Я видел, что кто-то сохранил модель только с.ckpt файлом, я не знаю, как это сделать. Как сохранить модель в виде.pb файла?

Ответ 1

  • файл.ckpt представляет собой выход старой версии saver.save(sess), который является эквивалентом ваших .ckpt-data (см. ниже)

  • файл "контрольной точки" предназначен только для того, чтобы сообщить некоторые функции TF, которые являются последним файлом контрольной точки.

  • .ckpt-meta содержит metagraph, т.е. структуру вашего вычислительного графа, без значений переменных (в основном, что вы можете видеть в тензограмме/графе).

  • .ckpt-data содержит значения для всех переменных без структуры. Чтобы восстановить модель на python, вы обычно используете файлы мета и данных (но вы также можете использовать файл .pb):

    saver = tf.train.import_meta_graph(path_to_ckpt_meta)
    saver.restore(sess, path_to_ckpt_data)
    
  • Я точно не знаю о .ckpt-index, я предполагаю, что какой-то индекс необходим внутри, чтобы правильно отобразить два предыдущих файла. В любом случае, это не так уж и необходимо, вы можете восстановить модель только с помощью .ckpt-meta и .ckpt-data.

  • файл .pb может сохранить весь ваш график (мета + данные). Для загрузки и использования (но не тренировки) графика в c++ вы обычно используете его, созданный с помощью freeze_graph, который создает файл .pb из мета и данных. Будьте осторожны (по крайней мере, в предыдущих версиях TF и для некоторых людей) функция py, предоставленная freeze_graph, не работала должным образом, поэтому вам придется использовать версию скрипта. Tensorflow также предоставляет метод tf.train.Saver.to_proto(), но я не знаю, что именно он делает.

Здесь много вопросов о том, как сохранить и восстановить график. См. Ответ здесь, например, но будьте осторожны, что два упомянутых учебника, хотя и очень полезны, далеки от совершенства, и многие люди все еще, похоже, пытаются импортировать модель в c++.

EDIT: похоже, вы также можете использовать.ckpt файлы в c++, поэтому, я думаю, вам больше не нужен файл.pb.

Ответ 2

Вы можете проверить classify_img_arg.py файл здесь. Я думаю, это хорошо объяснено там