2016-12-30 4 views
1

я столкнулся с этими странными проблемами ... Я использую этот код для создания tensorflow заставки:Tensorflow не может сохранить модель

tf.train.Saver(tf.all_variables(), max_to_keep=FLAGS.keep) 

, который должен быть очень стандартным. Однако, когда я указываю папку сохранения в свой пользовательский каталог (под моим именем пользователя) вместо «/ tmp», неожиданно, сохраненными моделями являются такие файлы, как

translate.ckpt-329.data-00000- из-00001

translate.ckpt-329.index

translate.ckpt-329.meta

Я не могу найти файл "translate.ckpt-329".

Сгенерированный файл контрольной точки указывает на:

model_checkpoint_path: "/Users/.../train_dir/translate.ckpt-329" 
all_model_checkpoint_paths: "/Users/.../train_dir/translate.ckpt-329" 

в то время как этот файл не существует, и создать проблемы для меня, восстанавливающие мою модель.

Может ли кто-нибудь пролить свет на это? Что может быть проблемой?


Спасибо за первый ответ! Я думаю, что моя большая проблема, это restore метод:

Исходный код использует этот способ для восстановления сеанса:

ckpt = tf.train.get_checkpoint_state(FLAGS.train_dir) 
model.saver.restore(session, ckpt.model_checkpoint_path) 

Что не удалось с V2 экономии :(

if ckpt and tf.gfile.Exists(ckpt.model_checkpoint_path): 
     logging.info("Reading model parameters from %s" % ckpt.model_checkpoint_path) 
     model.saver.restore(session, ckpt.model_checkpoint_path) 
    else: 
     logging.info("Created model with fresh parameters.") 
     session.run(tf.global_variables_initializer()) 
+0

Какая ошибка произошла с 'restore()' с? – mrry

+0

@mrry ahhh! Теперь я понимаю ... это 'tf.gfile.Exists()' не удалось ... не 'restore()' не удалось. Есть ли рекомендуемый способ проверить, имеет ли модель сохраненный файл контрольной точки теперь с V2? –

+0

Это хороший вопрос ... Я не думаю, что есть что-то (хотя вы могли бы убедить ['tf.train.latest_checkpoint()'] (https: //www.tensorflow.org/api_docs/python/state_ops/save_and_restoring_variables # latest_checkpoint), чтобы делать правильную вещь для вас. Это похоже на разумный запрос функции, потому что я думаю, что многие люди сталкиваются с подобными проблемами ... не стесняйтесь открывать проблему GitHub об этом, и мы направим его к нужному человеку. – mrry

ответ

3

TL; DR : В новом формате контрольной точки «имя файла», которое вы передаете в заставку, фактически используется в качестве префикса нескольких имен файлов, и файл с таким точным именем не записывается. Вы можете использовать старый формат контрольной точки, создав свой tf.train.Saver с необязательным аргументом write_version=tf.train.SaverDef.V1.

Из названий сохраненных файлов представляется, что вы используете формат контрольной точки «V2», который стал значением по умолчанию в TensorFlow 0,12. Этот формат хранит данные контрольной точки в нескольких файлах: один или несколько файлов данных (например, translate.ckpt-329.data-00000-of-00001 в вашем случае) и индексный файл (translate.ckpt-329.index), который сообщает TensorFlow, где каждая сохраненная переменная находится в файлах данных. В файле tf.train.Saver используется «имя файла», которое вы передаете в качестве префикса для имен этих файлов, но не создает файл с таким точным именем.

Хотя нет файла с точным именем, которое вы дали, вы можете использовать значение, возвращенное с saver.save(), в качестве аргумента для последующего saver.restore(), а остальные механизмы обнаружения контрольной точки должны продолжать работать, как и раньше.

+0

Есть ли способ для меня вернуться к V1 ?? В основном из-за того, что внутри кода встроен механизм автоматического сохранения/загрузки (а не я) ... и я не хочу ничего разрушать. –

+1

Да: просто передайте необязательный аргумент 'write_version = tf.train.SaverDef.V1' в инициализатор' tf.train.Saver'. – mrry

+0

Спасибо !!! Это должно помочь! Я также немного обновил этот вопрос ... если вы хотите еще раз взглянуть на него –

Смежные вопросы