Сохранение тензорного потока в / загрузка графика из файла



из того, что я собрал до сих пор, есть несколько различных способов сброса графика TensorFlow в файл, а затем загрузки его в другую программу, но я не смог найти четкие примеры/информацию о том, как они работают. Что я уже знаю это:




  1. сохраните переменные модели в файле контрольных точек (.ckpt) с помощью tf.train.Saver() и восстановить их позже (источник)

  2. сохранить модель в a .pb файл и загрузить его обратно в использовании tf.train.write_graph() и tf.import_graph_def() (источник)

  3. загрузить в модель из a .PB файл, переобучить его, и сбросить его в новый .PB файл с использованием Bazel (источник)

  4. заморозить график, чтобы сохранить график и веса вместе (источник)

  5. использовать as_graph_def() чтобы сохранить модель и для Весов / переменных, сопоставьте их в константы (источник)


однако, я не смог прояснить несколько вопросов относительно этих различных методов:




  1. Что касается файлов контрольных точек, они сохраняют только обученные веса модели? Могут ли файлы контрольных точек загружаться в новую программу и использоваться для запуска модели, или они просто служат способами сохранения весов в модели в определенное время/этап?

  2. о tf.train.write_graph(), веса / переменные также сохраняются?

  3. Что касается Bazel, он может только сохранять / загружать.ПБ файлы для переподготовки? Есть простая команда Bazel просто сбросить график в a .ПБ?

  4. Что касается замораживания, можно ли загрузить замороженный график с помощью tf.import_graph_def()?

  5. Android demo для TensorFlow загружается в начальной модели Google от a .файл PB. Если бы я хотел заменить свой собственный .pb file, как я могу это сделать? Мне нужно будет изменить любой собственный код / методы?

  6. в общем, в чем именно разница между всеми этими методами? Или в более широком смысле, в чем разница между as_graph_def()/.ckpt/.ПБ?


короче говоря, то, что я ищу, - это метод сохранения как графика (например, различные операции и т. д.), так и его Весов/переменных в файл, который затем можно использовать для загрузки графика и весов в другую программу для использования (не обязательно продолжения/переподготовки).



документация по этой теме не очень проста, поэтому любые ответы/информация будут очень признательны.

623   2  

2 ответов:

есть много способов подойти к проблеме сохранения модели в TensorFlow, что может сделать ее немного запутанной. Принимая каждый из ваших под-вопросов по очереди:

  1. файлы контрольных точек (созданные, например, путем вызова saver.save() на tf.train.Saver объект) содержат только веса, и любые другие переменные, определенные в той же программе. Чтобы использовать их в другой программе, необходимо заново создать связанную структуру графа (например, запустив код, чтобы построить его снова, или вызов tf.import_graph_def()), который говорит TensorFlow, что делать с этими весами. Обратите внимание, что вызов saver.save() также создает файл, содержащий MetaGraphDef, который содержит график и сведения о том, как связать веса из контрольной точки с этим графиком. Смотрите учебник для более подробной информации.

  2. tf.train.write_graph() только пишет структуру графика; не веса.

  3. Bazel не имеет отношения к чтению или записи тензорных графов. (Возможно, я неправильно понял ваш вопрос: не стесняйтесь разъяснять его в комментарии.)

  4. замороженный график может быть загружен с помощью tf.import_graph_def(). В этом случае веса (как правило) встроены в график, поэтому вам не нужно загружать отдельную контрольную точку.

  5. основное изменение будет заключаться в обновлении имен тензора(ов) которые подаются в модель, и имена тензоров, которые извлекаются из модели. В демо-версии TensorFlow для Android это будет соответствовать inputName и outputName строки, которые передаются в TensorFlowClassifier.initializeTensorFlow().

  6. The GraphDef это структура программы, которая обычно не меняется в процессе обучения. Контрольная точка-это моментальный снимок состояния тренировочного процесса, который обычно изменяется на каждом этапе тренировочного процесса. В результате TensorFlow использует различные форматы хранения для этих типов данных, а низкоуровневый API предоставляет различные способы их сохранения и загрузки. Библиотеки более высокого уровня, такие как MetaGraphDef библиотеки Keras и skflow построить на этих механизмах, чтобы обеспечить более удобные способы сохранения и восстановления всей модели.

вы можете попробовать следующий код:

with tf.gfile.FastGFile('model/frozen_inference_graph.pb', "rb") as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())
    g_in = tf.import_graph_def(graph_def, name="")
sess = tf.Session(graph=g_in)

Comments

    Ничего не найдено.