Не удается восстановить предварительно обученную сеть с помощью Tensorflow

Я застрял в восстановлении предварительно обученной сети с помощью Tensorflow ....

import tensorflow as tf
import os
os.environ['TF_CPP_MIN_LOG_LEVEL']='2'

sess=tf.Session()
saver = tf.train.import_meta_graph('./model/20170512-110547/model-20170512-110547.meta')
saver.restore(sess,'./model/20170512-110547/')

Я хотел бы использовать предварительно обученную сеть, которая была обучена для распознавания лиц, а затем хочу добавить несколько слоев для обучения передачи. (Я загрузил модель отсюда. https://github.com/davidsandberg/facenet)

Когда я выполняю приведенный выше код, он показывает ошибку,

WARNING:tensorflow:The saved meta_graph is possibly from an older release:
'model_variables' collection should be of type 'byte_list', but instead is of type 'node_list'.
Traceback (most recent call last):
  File "/Users/user/Desktop/desktop/Python/HCR/Transfer_face/test.py", line 7, in <module>
    saver.restore(sess,'./model/20170512-110547/')
  File "/Users/user/anaconda2/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1560, in restore
    {self.saver_def.filename_tensor_name: save_path})
  File "/Users/user/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 895, in run
    run_metadata_ptr)
  File "/Users/user/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1124, in _run
    feed_dict_tensor, options, run_metadata)
  File "/Users/user/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1321, in _do_run
    options, run_metadata)
  File "/Users/user/anaconda2/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1340, in _do_call
    raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.NotFoundError: Unsuccessful TensorSliceReader constructor: Failed to find any matching files for ./model/20170512-110547/
     [[Node: save/RestoreV2_491 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_491/tensor_names, save/RestoreV2_491/shape_and_slices)]]

Caused by op u'save/RestoreV2_491', defined at:
  File "/Users/user/Desktop/desktop/Python/HCR/Transfer_face/test.py", line 6, in <module>
    saver = tf.train.import_meta_graph('./model/20170512-110547/model-20170512-110547.meta')
  File "/Users/user/anaconda2/lib/python2.7/site-packages/tensorflow/python/training/saver.py", line 1698, in import_meta_graph
    **kwargs)
  File "/Users/user/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/meta_graph.py", line 656, in import_scoped_meta_graph
    producer_op_list=producer_op_list)
  File "/Users/user/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/importer.py", line 313, in import_graph_def
    op_def=op_def)
  File "/Users/user/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2630, in create_op
    original_op=self._default_original_op, op_def=op_def)
  File "/Users/user/anaconda2/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1204, in __init__
    self._traceback = self._graph._extract_stack()  # pylint: disable=protected-access

NotFoundError (see above for traceback): Unsuccessful TensorSliceReader constructor: Failed to find any matching files for ./model/20170512-110547/
     [[Node: save/RestoreV2_491 = RestoreV2[dtypes=[DT_FLOAT], _device="/job:localhost/replica:0/task:0/cpu:0"](_arg_save/Const_0_0, save/RestoreV2_491/tensor_names, save/RestoreV2_491/shape_and_slices)]]

Я не могу понять, почему система не может найти предварительно обученные данные ... И структура каталогов такая, как показано ниже

USER-no-MacBook-Pro: Transfer_face пользователь $ ls -R

модель test.py

./модель:

20170512-110547

./model/20170512-110547:

20170512-110547.pb

модель-20170512-110547.ckpt-250000.index

модель-20170512-110547.ckpt-250000.data-00000-из-00001

модель-20170512-110547.meta


person soshi shimada    schedule 14.10.2017    source источник
comment
Попробуйте старую версию tensorflow: The saved meta_graph is possibly from an older release. Эта модель была построена с r0.12.   -  person Maxim    schedule 14.10.2017
comment
Спасибо. Пробовал версию 0.12 и 1.2.0 (в требовании написано). но все равно показывает ту же ошибку ....   -  person soshi shimada    schedule 14.10.2017
comment
Попробуйте передать полный абсолютный путь к каталогу модели при вызове saver.restore() (а не относительный путь './model/20170512-110547/'). В более старых версиях TensorFlow (включая 0.12, я думаю) была ошибка, из-за которой они не принимали относительные пути в некоторых API, но это должно было быть исправлено в последней версии.   -  person mrry    schedule 16.10.2017


Ответы (2)


Импортируйте файл .pb.

import tensorflow as tf
from tensorflow.python.framework import tensor_util

with tf.gfile.GFile('20170512-110547.pb', "rb") as f:
    graph_def = tf.GraphDef()
    graph_def.ParseFromString(f.read())

#import into default graph
tf.import_graph_def(graph_def)

#print some data
wts = [n for n in graph_def.node if n.op == 'Const']

for n in wts:
    print(tensor_util.MakeNdarray(n.attr['value'].tensor))

Связанные вопросы:

Импортируйте простую замороженную модель Tensorflow. pb и делать прогнозы на C ++

получить веса значений из файла .pb с помощью Tensorflow

Связанная документация: GraphDef

person bartolo-otrit    schedule 29.11.2017

Вам нужно использовать путь ckpt "./model/20170512-110547/model-20170512-110547.ckpt-250000" вместо пути к папке.

person hsc    schedule 05.03.2018