После того, как вы тренируете модель в Tensorflow:
- Как сохранить обученную модель?
- Как вы позже восстановите эту сохраненную модель?
python
tensorflow
machine-learning
model
mathetes
источник
источник
Ответы:
Документы
исчерпывающий и полезный учебник -> https://www.tensorflow.org/guide/saved_model
Подробное руководство Keras по сохранению моделей -> https://www.tensorflow.org/guide/keras/save_and_serialize
Из документов:
Сохранить
Восстановить
Tensorflow 2
Это все еще бета, поэтому я бы посоветовал против пока. Если вы все еще хотите пойти по этому пути, вот руководство по
tf.saved_model
использованиюТензор потока <2
simple_save
Много хорошего ответа, для полноты я добавлю свои 2 цента: simple_save . Также автономный пример кода с использованием
tf.data.Dataset
API.Python 3; Тензор потока 1.14
Восстановление:
Автономный пример
Оригинальное сообщение в блоге
Следующий код генерирует случайные данные ради демонстрации.
Dataset
а затем ееIterator
. Мы получаем сгенерированный тензор итератора,input_tensor
который называется входом для нашей модели.input_tensor
: двунаправленного RNN на основе GRU, за которым следует плотный классификатор. Потому что почему бы и нет.softmax_cross_entropy_with_logits
оптимизирована сAdam
. После 2 эпох (по 2 партии в каждой) мы сохраняем «обученную» модель с помощьюtf.saved_model.simple_save
. Если вы запустите код как есть, то модель будет сохранена в папке, которая называетсяsimple/
в вашем текущем рабочем каталоге.tf.saved_model.loader.load
. Мы берем заполнители и логиты сgraph.get_tensor_by_name
иIterator
инициализирующую операцию сgraph.get_operation_by_name
.Код:
Это напечатает:
источник
tf.contrib.layers
?[n.name for n in graph2.as_graph_def().node]
. Как сказано в документации, простое сохранение направлено на упрощение взаимодействия с обслуживанием тензорного потока, в этом суть аргументов; другие переменные, тем не менее, все еще восстанавливаются, иначе вывод не произойдет. Просто возьмите интересующие вас переменные, как я сделал в примере. Проверьте документациюglobal_step
аргумента, если вы остановитесь, а затем попытаетесь возобновить тренировку, он будет думать, что вы на шаг впереди. Это как минимумЯ улучшаю свой ответ, чтобы добавить больше деталей для сохранения и восстановления моделей.
В (и после) версии 0.11 Tensorflow :
Сохранить модель:
Восстановить модель:
Этот и некоторые более продвинутые варианты использования были очень хорошо объяснены здесь.
Краткое полное руководство по сохранению и восстановлению моделей Tensorflow
источник
:0
к именам?В (и после) TensorFlow версии 0.11.0RC1, вы можете сохранить и восстановить вашу модель непосредственно по телефону
tf.train.export_meta_graph
и вtf.train.import_meta_graph
соответствии с https://www.tensorflow.org/programmers_guide/meta_graph .Сохранить модель
Восстановить модель
источник
<built-in function TF_Run> returned a result with an error set
tf.get_variable_scope().reuse_variables()
затемvar = tf.get_variable("varname")
. Это дает мне ошибку: «ValueError: Переменная varname не существует или не была создана с помощью tf.get_variable ()». Почему? Разве это не возможно?Для версии TensorFlow <0.11.0RC1:
Сохраненные контрольные точки содержат значения для
Variable
s в вашей модели, а не саму модель / график, что означает, что график должен быть таким же, когда вы восстанавливаете контрольную точку.Вот пример для линейной регрессии, где есть обучающий цикл, который сохраняет переменные контрольные точки, и раздел оценки, который будет восстанавливать переменные, сохраненные в предыдущем прогоне, и вычислять прогнозы. Конечно, вы также можете восстановить переменные и продолжить обучение, если хотите.
Вот документы для
Variable
s, которые охватывают сохранение и восстановление. А вот документы дляSaver
.источник
batch_x
нужно быть? Binary? Numpy массив?undefined
. Можете ли вы сказать мне, что является определением FLAGS для этого кода. @RyanSepassiМоя среда: Python 3.6, Tensorflow 1.3.0
Хотя было много решений, большинство из них основано на
tf.train.Saver
. Когда мы загружаем.ckpt
спасеныSaver
, мы должны либо пересмотреть сеть tensorflow или использовать какое - то странное и с трудом вспомнил имя, например'placehold_0:0'
,'dense/Adam/Weight:0'
. Здесь я рекомендую использоватьtf.saved_model
один из простейших примеров, приведенных ниже, вы можете узнать больше об обслуживании модели TensorFlow :Сохранить модель:
Загрузите модель:
источник
Модель состоит из двух частей: определение модели, сохраненное
Supervisor
какgraph.pbtxt
в каталоге модели, и числовые значения тензоров, сохраненные в файлах контрольных точек, напримерmodel.ckpt-1003418
.Определение модели может быть восстановлено с помощью
tf.import_graph_def
, а веса восстановлены с помощьюSaver
.Тем не менее,
Saver
используется специальная коллекция, содержащая список переменных, которые прикреплены к модели Graph, и эта коллекция не инициализируется с помощью import_graph_def, поэтому вы не можете использовать их вместе в данный момент (это исправлено в нашей дорожной карте). На данный момент вы должны использовать подход Райана Сепасси - вручную построить график с одинаковыми именами узлов и использоватьSaver
для загрузки в него весов.(В качестве альтернативы вы можете взломать его, используя, используя
import_graph_def
, создавая переменные вручную и используяtf.add_to_collection(tf.GraphKeys.VARIABLES, variable)
для каждой переменной, затем используяSaver
)источник
Вы также можете пойти по этому более простому пути.
Шаг 1: инициализируйте все ваши переменные
Шаг 2: сохранить сессию внутри модели
Saver
и сохранить ееШаг 3: восстановить модель
Шаг 4: проверьте вашу переменную
Работая в другом экземпляре Python, используйте
источник
В большинстве случаев сохранение и восстановление с диска -
tf.train.Saver
это ваш лучший вариант:Вы также можете сохранить / восстановить саму структуру графика (подробности см. В документации MetaGraph ). По умолчанию
Saver
структура графика сохраняется в.meta
файл. Вы можете позвонить,import_meta_graph()
чтобы восстановить его. Он восстанавливает структуру графа и возвращает значение,Saver
которое вы можете использовать для восстановления состояния модели:Однако есть случаи, когда вам нужно что-то гораздо быстрее. Например, если вы реализуете раннюю остановку, вы хотите сохранять контрольные точки каждый раз, когда модель улучшается во время обучения (как измерено в наборе проверки), а затем, если в течение некоторого времени нет прогресса, вы захотите вернуться к лучшей модели. Если вы будете сохранять модель на диск каждый раз, когда она улучшается, это значительно замедлит процесс обучения. Хитрость заключается в том, чтобы сохранить состояния переменных в памяти , а затем просто восстановить их позже:
Краткое объяснение: когда вы создаете переменную
X
, TensorFlow автоматически создает операцию присваивания,X/Assign
чтобы установить начальное значение переменной. Вместо того, чтобы создавать заполнители и дополнительные операции присваивания (которые просто испортили бы график), мы просто используем эти существующие операции присваивания. Первый вход каждого присваивания op является ссылкой на переменную, которую он должен инициализировать, а второй input (assign_op.inputs[1]
) является начальным значением. Таким образом, чтобы установить любое значение, которое мы хотим (вместо начального значения), нам нужно использовать afeed_dict
и заменить начальное значение. Да, TensorFlow позволяет указывать значение для любой операции, а не только для заполнителей, так что это прекрасно работает.источник
Как сказал Ярослав, вы можете взломать восстановление из graph_def и контрольной точки, импортировав график, создав переменные вручную, а затем используя Saver.
Я реализовал это для личного использования, поэтому я решил поделиться этим кодом здесь.
Ссылка: https://gist.github.com/nikitakit/6ef3b72be67b86cb7868
(Это, конечно, взлом, и нет никакой гарантии, что модели, сохраненные таким образом, останутся читаемыми в будущих версиях TensorFlow.)
источник
Если это внутренне сохраненная модель, вы просто указываете восстановитель для всех переменных как
и использовать его для восстановления переменных в текущем сеансе:
Для внешней модели вам необходимо указать соответствие имен ее переменных именам ваших переменных. Вы можете просмотреть имена переменных модели, используя команду
Сценарий inspect_checkpoint.py можно найти в папке «./tensorflow/python/tools» источника Tensorflow.
Чтобы указать отображение, вы можете использовать мой Tensorflow-Worklab , который содержит набор классов и сценариев для обучения и переподготовки различных моделей. Включает пример переподготовки моделей ResNet, расположенный здесь
источник
all_variables()
сейчас устарелаВот мое простое решение для двух основных случаев, отличающихся тем, хотите ли вы загрузить график из файла или построить его во время выполнения.
Этот ответ верен для Tensorflow 0.12+ (включая 1.0).
Восстановление графика в коде
Сохранение
загрузка
Загрузка также графика из файла
При использовании этого метода убедитесь, что все ваши слои / переменные явно задают уникальные имена.В противном случае Tensorflow сам сделает имена уникальными, и поэтому они будут отличаться от имен, хранящихся в файле. В предыдущей технике это не проблема, поскольку имена «искажаются» одинаково как при загрузке, так и при сохранении.
Сохранение
загрузка
источник
global_step
переменная и скользящие средние значения нормализации партии являются необучаемыми переменными, но обе они, безусловно, заслуживают сохранения. Кроме того, вы должны более четко отличать построение графика от запуска сеанса, напримерSaver(...).save()
, каждый раз при его запуске будут создаваться новые узлы. Наверное, не то, что вы хотите. И это еще не все ...: /Вы также можете проверить примеры в TensorFlow / skflow , который предлагает
save
иrestore
методы, которые могут помочь вам легко управлять вашими моделями. Он имеет параметры, которые вы также можете контролировать, как часто вы хотите создавать резервные копии вашей модели.источник
Если вы используете tf.train.MonitoredTrainingSession в качестве сеанса по умолчанию, вам не нужно добавлять дополнительный код для сохранения / восстановления. Просто передайте имя dir контрольной точки в конструктор MonitoredTrainingSession, он будет использовать сессионные перехватчики для их обработки.
источник
Все ответы здесь великолепны, но я хочу добавить две вещи.
Во-первых, чтобы уточнить ответ @ user7505159, важно добавить «./» в начало восстанавливаемого имени файла.
Например, вы можете сохранить график без "./" в имени файла следующим образом:
Но чтобы восстановить график, вам может понадобиться добавить «./» к имени файла:
Вам не всегда нужен «./», но это может вызвать проблемы в зависимости от вашей среды и версии TensorFlow.
Также необходимо упомянуть, что это
sess.run(tf.global_variables_initializer())
может быть важно перед восстановлением сеанса.Если при попытке восстановить сохраненный сеанс вы получаете сообщение об ошибке в отношении неинициализированных переменных, убедитесь, что вы указали
sess.run(tf.global_variables_initializer())
передsaver.restore(sess, save_file)
строкой. Это может спасти вас от головной боли.источник
Как описано в выпуске 6255 :
вместо
источник
Согласно новой версии Tensorflow,
tf.train.Checkpoint
это предпочтительный способ сохранения и восстановления модели:Вот пример:
Больше информации и пример здесь.
источник
Для tenorflow 2.0 это так же просто, как
Для восстановления:
источник
tf.keras Сохранение модели с помощью
TF2.0
Я вижу отличные ответы для сохранения моделей с использованием TF1.x. Я хочу предоставить еще несколько советов по сохранению
tensorflow.keras
моделей, что немного сложно, так как существует множество способов сохранить модель.Здесь я приведу пример сохранения
tensorflow.keras
модели вmodel_path
папку в текущем каталоге. Это хорошо работает с самым последним тензорным потоком (TF2.0). Я обновлю это описание, если будут какие-либо изменения в ближайшем будущем.Сохранение и загрузка всей модели
Сохранение и загрузка модели Только веса
Если вас интересует только сохранение весов моделей, а затем загрузка весов для восстановления модели, тогда
Сохранение и восстановление с помощью обратного вызова контрольной точки keras
сохранение модели с пользовательскими метриками
Сохранение модели keras с пользовательскими операциями
Когда у нас есть пользовательские операции, как в следующем случае (
tf.tile
), нам нужно создать функцию и обернуть ее слоем Lambda. В противном случае модель не может быть сохранена.Я думаю, что я рассмотрел несколько способов сохранения модели tf.keras. Однако есть много других способов. Пожалуйста, прокомментируйте ниже, если вы видите, что ваш случай использования не описан выше. Спасибо!
источник
Используйте tf.train.Saver для сохранения модели, напомните, вам нужно указать var_list, если вы хотите уменьшить размер модели. Val_list может быть tf.trainable_variables или tf.global_variables.
источник
Вы можете сохранить переменные в сети, используя
Чтобы восстановить сеть для повторного использования позже или в другом сценарии, используйте:
Важные точки:
sess
должно быть одинаковым между первым и последующим прогонами (связная структура).saver.restore
нужен путь к папке с сохраненными файлами, а не отдельный путь к файлу.источник
Везде, где вы хотите сохранить модель,
Убедитесь, что у всех
tf.Variable
есть имена, потому что вы можете восстановить их позже, используя их имена. И где вы хотите предсказать,Убедитесь, что заставка работает внутри соответствующего сеанса. Помните, что если вы используете
tf.train.latest_checkpoint('./')
, то будет использоваться только последняя контрольная точка.источник
Я на версии:
Простой способ
Сохранить:
Восстановить:
источник
Для tensflow-2.0
это очень просто
СПАСТИ
ВОССТАНОВИТЬ
источник
После ответа @Vishnuvardhan Janapati, вот еще один способ сохранить и перезагрузить модель с пользовательским слоем / метрикой / потерей в TensorFlow 2.0.0.
Таким образом, после того, как вы выполнили такие коды и сохранили свою модель с помощью
tf.keras.models.save_model
илиmodel.save
или с помощью функцииModelCheckpoint
обратного вызова, вы можете перезагрузить вашу модель без необходимости точных пользовательских объектов, таких простых, какисточник
В новой версии tenorflow 2.0 процесс сохранения / загрузки модели стал намного проще. Из-за реализации API Keras, высокоуровневого API для TensorFlow.
Чтобы сохранить модель: проверьте документацию для справки: https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/models/save_model
Чтобы загрузить модель:
https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/keras/models/load_model
источник
Вот простой пример использования Tensorflow 2.0 SavedModel формата (который является рекомендуемым форматом, в соответствии с Документами ) для простого MNIST набора данных классификатора, используя Keras функционального API не слишком много фантазии происходит:
Что такое
serving_default
?Это имя определения подписи выбранного вами тега (в данном случае
serve
был выбран тег по умолчанию ). Также здесь объясняется, как найти теги и подписи модели с помощьюsaved_model_cli
.Отказ от ответственности
Это просто базовый пример, если вы просто хотите запустить его, но он ни в коем случае не является полным ответом - возможно, я смогу обновить его в будущем. Я просто хотел привести простой пример, используя
SavedModel
TF 2.0, потому что я нигде не видел, даже такого простого.@ Ответ Тома - пример SavedModel, но он не будет работать на Tensorflow 2.0, потому что, к сожалению, есть некоторые серьезные изменения.
Ответ @ Vishnuvardhan Janapati говорит о TF 2.0, но это не для формата SavedModel.
источник