Экспорт замороженного файла graph .pb в Tensorflow 2

#tensorflow #tensorflow2.0

#tensorflow #tensorflow2.0

Вопрос:

Я тестировал альфа-версию Tensorflow 2 и пытался заморозить и экспортировать модель в файл .pb graphdef.

В Tensorflow 1 я мог бы сделать что-то вроде этого:

 # Freeze the graph.
frozen_graph_def = tf.graph_util.convert_variables_to_constants(
    sess,
    sess.graph_def,
    output_node_names)

# Save the frozen graph to .pb file.
with open('model.pb', 'wb') as f:
    f.write(frozen_graph_def.SerializeToString())
  

Однако это больше не представляется возможным, поскольку convert_variables_to_constants удален, а использование сеансов не рекомендуется.

Я посмотрел и обнаружил, что есть утилита для замораживания графикаhttps://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/tools/freeze_graph.py это работает с экспортом SavedModel.

Есть ли какой-нибудь способ сделать это в Python по-прежнему, или я должен переключиться и использовать этот инструмент сейчас?

Комментарии:

1. Вы видели tensorflow.org/alpha/guide/saved_model ?

Ответ №1:

Я также столкнулся с этой же проблемой при переходе с tensorflow1.x на бета-версию tensoflow2.0. Эта проблема может быть решена двумя способами:

  1. 1-й — перейти к документам tensflow2.0, выполнить поиск методов, которые вы использовали, и изменить синтаксис для каждой строки amp;
  2. Для использования скрипта tf_ugrade_v2 от Google

tf_upgrade_v2 —файл your_tf1_script_file —файл outfile converted_tf2_file

Попробуйте выполнить приведенную выше команду, чтобы изменить ваш скрипт tensorflow1.x на tensorflow2.0, это решит все ваши проблемы.

Кроме того, вы можете переименовать метод (вручную, обратившись к документации), переименовав ‘tf.graph_util.convert_variables_to_constants’ в ‘tf.compat.v1.graph_util.convert_variables_to_constants’

Проблема измерения заключается в том, что в tensorflow2.0 изменилось множество синтаксисов и функций, попробуйте обратиться к документам tensoflow2.0 или воспользуйтесь скриптом Google tf_upgrade_v2

Комментарии:

1. Итак, пока нет способа сделать это без использования модуля compat из того, что вы нашли?

2. Я думаю, нет другого способа лучше, чем я ответил

Ответ №2:

Не уверен, видели ли вы эту проблему в Tensorflow 2.0, но этот ответ, похоже, является обходным:

https://github.com/tensorflow/tensorflow/issues/29253#issuecomment-530782763

Примечание: это не сработало для моей модели nlp, но, возможно, это сработает для вас. Предлагаемый обходной путь заключается в использовании model.save_weights('weights.h5') в среде TF 2.0. Затем создайте новую среду с помощью TF 1.14 и выполните все следующие шаги в TF 1.14 env. Создайте свою модель model = create_model() и используйте model.load_weights('weights.h5') для загрузки весов обратно в вашу модель. Затем сохраните всю модель с помощью model.save('final_model.h5') . Если вам удастся выполнить вышеуказанные шаги, выполните остальные шаги по ссылке, чтобы использовать freeze_graph.

Комментарии:

1. Я не проверял точность своих моделей, но это решение, похоже, работает, отлично!

2. предлагается использовать saved_model вместо h5 в tf 2