Я также задавал этот вопрос на нескольких платформах без помощи. Поэтому я решил провести некоторую экспериментальную работу, и вот что я нашел. Это может быть долго, но, пожалуйста, потерпите меня.
Для импорта модели в Tensor-flow мы используем
with tf.Session() as sess:
new_saver = tf.train.import_meta_graph('my_test_model-1000.meta')
new_saver.restore(sess, tf.train.latest_checkpoint('./'))
Файл .meta
содержит все переменные, операции, коллекции и т. д. обученной модели. Что делает tf.train.latest_checkpoint('./')
, так это использует файл контрольной точки (который просто хранит запись о последних сохраненных файлах контрольной точки) для импорта файла xxxx_model.data-00000-of-00001
. Этот .data-00000-of-00001
содержит все веса, смещения, градиенты и т. д., которые должны быть загружены в переменные, содержащиеся в my_test_model-1000.meta
.
Резюме [Полуполный код]
with tf.Session() as sess:
new_saver = tf.train.import_meta_graph('my_test_model-1000.meta')
#new_saver.restore(sess, tf.train.latest_checkpoint('./'))
tensor_variable = tf.trainable_variables()
for tensor_var in tensor_variable:
#print(sess.run(tensor_var))
print(tensor_var)
Этот исходный код распечатает все переменные из .meta
, которые можно обучить. Если вы попытаетесь запустить print(sess.run(tensor_var))
, вы получите сообщение об ошибке. Это потому, что переменные не были инициализированы. Однако, если вы раскомментируете new_saver.restore(sess, tf.train.latest_checkpoint('./'))
и запустите print(sess.run(tensor_var))
, вы получите все переменные вместе со значениями, загруженными в переменные.
Теперь к «.model»
Я думаю, что xxxxxx.model
работает так же, как xxxx_model.data-00000-of-00001
из tensorflow. Он не содержит переменных, поэтому, если вы попытаетесь сделать
with tf.Session() as sess:
new_saver = tf.train.import_meta_graph('xxx.model')
вы получите ошибку. Помните, причина в том, что этот .model
файл не содержит ни переменных, ни графика операций в любой форме. Если вы также попытаетесь сделать
with tf.Session() as sess:
new_saver = tf.train.Saver()
new_saver.restore(sess, "xxxx.model")
вы также получите ошибку. Это связано с тем, что нет соответствующих переменных для загрузки значений. Поэтому, если вы когда-нибудь получите файл xxx.model
, вам придется пройти через мучительную репликацию всех переменных и операций, прежде чем пытаться запустить new_saver.restore(sess, "xxxx.model")
. Надеюсь, если вы сможете воспроизвести архитектуру, все будет работать гладко и без проблем.
Прошу прощения, что получилось длинно, но учитывая, что в интернете почти нет ответа, пришлось сделать из этого лекцию. :)
19.04.2018