Сложная нейронная сеть подобна ребенку, которого надо долго обучать, прежде чем позволить решать реальные задачи. Соответственно, из раза в раз требуется сохранять ее состояние на жестком диске.
Для сохранения весов модели (значений переменных во всех подмодулях) можно воспользоваться классом tf.train.Checkpoint. Например, сохраним TwoLayerModel (рассматривалась ранее) определенную ниже:
В результате будут созданы два файла: один для сохранения весов и второй - индекса, который отслеживает фактические изменения в контрольных точках и ведет их нумерацию.
Посредством вызова tf.train.list_variables можно проверить, что состояние переменных действительно сохранилось :
Для восстановления весов в новую модель используется метод restore класса tf.train.Checkpoint. При этом текущие веса модели будут заменены восстанавливаемыми.
Давайте создадим экземпляр TwoLayerModel. Посмотрим его выдачу на тестовом наборе и сохраним веса модели:
Теперь создадим другой экземпляр TwoLayerModel, проверим его выдачу на том же наборе:
Если восстановить состояние первой модели во вторую, то результат выдачи станет таким же, как и в первый раз (соответственно, веса переменных mod2 стали идентичны mod):
Следует отметить, что tf.train.Checkpoint фиксирует точное значение всех параметров, используемых моделью. При этом не сохраняет графа вычислений, определенного моделью (в отличие от tf.saved_model). Поэтому tf.train.Checkpoint полезен, когда доступен исходный код нейросети, который будет использовать сохраненные значения параметров.