Текущая версия 0.10rc0 выглядит по-другому, нет tf.saver(). Теперь это tf.train.Saver(). Кроме того, команда save добавляет информацию к имени файла save_path для global_step, поэтому мы не можем просто вызвать восстановление на том же пути save_path, поскольку это не фактический файл сохранения.
Самый простой способ я вижу прямо сейчас, чтобы использовать SessionManager вместе с заставки, как это:
my_checkpoint_dir = "/tmp/checkpoint_dir"
# make a saver to use with SessionManager for restoring
saver = tf.train.Saver()
# Build an initialization operation to run below.
init = tf.initialize_all_variables()
# use a SessionManager to help with automatic variable restoration
sm = tf.train.SessionManager()
# try to find the latest checkpoint in my_checkpoint_dir, then create a session with that restored
# if no such checkpoint, then call the init_op after creating a new session
sess = sm.prepare_session("", init_op=init, saver=saver, checkpoint_dir=my_checkpoint_dir))
Вот так. Теперь у вас есть сеанс, который либо восстановлен из my_checkpoint_dir (убедитесь, что каталог существует до его вызова), либо если там нет контрольной точки, он создает новый сеанс и вызывает init_op для инициализации ваших переменных.
Если вы хотите сохранить, вы просто сохраните любое имя, которое вы хотите в этом каталоге, и передайте файл global_step. Вот пример, когда я сохраняю переменную шага в цикле как global_step, поэтому он возвращается к этой точке если убить программу и перезапустить его, чтобы он восстанавливает блокпост:.
checkpoint_path = os.path.join(my_checkpoint_dir, 'model.ckpt')
saver.save(sess, checkpoint_path, global_step=step)
Это создает файлы в my_checkpoint_dir как «model.ckpt-1000», где 1000 является global_step прошло в случае, если он продолжает работать, то вы получите больше похоже на «model.ckpt-2000». При запуске программы SessionManager поднимает последнюю из них. Путь checkpoint_path может быть любым желаемым именем файла, если он находится в checkpoint_dir. Save() создаст этот файл с добавлением global_step (как показано выше). Он также создает индексный файл «контрольной точки», в результате которого SessionManager обнаруживает последнюю контрольную точку сохранения.
Это не работает, каждый раз, когда я возобновляют обучение переменной global_step сбрасывается в 0 –
это будет означать, что global_step вы экономите до контрольного пункта 0 , или вы повторно инициализируете его до 0 после его восстановления –
Это было бы хорошим решением, но если 'saver.restore' может вернуть global_step, это было бы просто. Мы можем просто сделать «global_step = saver.restore (...)» Как вы думаете, команда tenorflow может быть заинтересована в этом направлении? –