2

Я пытаюсь загрузить ранее подготовленную модель обучения тензоров из файлов контрольных точек, теперь эти файлы контрольных точек имеют в своем распоряжении переменные var, поэтому для загрузки графика мне нужно сначала загрузить graph_def из ** ckpt.meta файл:Ошибка: график тензора отличается от графика сеанса

graph = tf.Graph() 
sess = tf.InteractiveSession(graph=graph) 
saver = tf.train.import_meta_graph('/data/model_cache/model.ckpt-39.meta') 
    ckpt = tf.train.get_checkpoint_state(FLAGS.checkpoint_dir) 
    if ckpt and ckpt.model_checkpoint_path: 
     if os.path.isabs(ckpt.model_checkpoint_path): 
      saver.restore(sess, ckpt.model_checkpoint_path) 

После того как я загрузил модели у меня есть метод, который использует эту модель для вывода для реализации deep-dream Algo. Проблема заключается в том, когда я звоню Eval с сеансом по умолчанию я получаю ниже ошибки:

File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/ops.py", line 555, in eval 
return _eval_using_default_session(self, feed_dict, self.graph, session)File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework /ops.py", line 3495, in _eval_using_default_session 
raise ValueError("Cannot use the given session to evaluate tensor: " 
ValueError: Cannot use the given session to evaluate tensor: the tensor's graph is different from the session's graph. 

Я подтвердил, что tf.get_default_graph() и sess.graph указывают на тот же адрес памяти. Должно быть что-то очень основное, что мне не хватает.

Я новичок в тензорном потоке, поэтому любая помощь в этом отношении будет действительно оценена. Благодаря

+0

попробуйте использовать обычную 'сессию' вместо' InteractiveSession' – fabrizioM

+0

Из сообщения об ошибке, я предполагаю, что вы вызываете 'tensor.eval()' или 'op.run()' на объект это на другом графике из 'sess.graph' - вы можете распечатать' tensor.graph' или 'op.graph' (если необходимо), чтобы узнать. Трудно сказать, как это может возникнуть, не зная больше о том, как был создан этот объект, и о контексте, в котором вы его вызываете. Можете ли вы поделиться больше кода? – mrry

ответ

0

Весьма вероятно, что мета-график, который вы импортируете, т.е. /data/model_cache/model.ckpt-39.meta отличается образуют один, что контрольно-пропускной пункт tf.train.get_checkpoint_state(FLAGS.checkpoint_dir) использовал.

Обычная практика должна иметь get_checkpoint_state() вызов (или tf.train.latest_checkpoint(FLAGS.checkpoint_dir)) и использовать его выход в import_meta_graph() вызова, а затем, с тем же именем (контрольно-пропускным пунктом и возвращенной заставкой) восстановить переменные в сессии. Это, конечно же, можно сделать, если мета-график сохраняется в каждой контрольной точке.