#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-й — перейти к документам tensflow2.0, выполнить поиск методов, которые вы использовали, и изменить синтаксис для каждой строки amp;
- Для использования скрипта 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