将Graph转换为SavedModel后,Tensorflow FailedPreconditionError

问题描述

我需要优化传统的tensorflow模型,我正在关注此博客文章https://medium.com/google-cloud/optimizing-tensorflow-models-for-serving-959080e9ddbf (我首先尝试了tensorflow lite转换器,但没有成功。)

除了最后一个步骤,博客文章中的所有步骤均有效,将优化后的Graph转换回SavedModel格式。经过一番实验后,我最终获得了以下功能

def convert_graph_def_to_saved_model(export_dir,graph_filepath):
    if tf.gfile.Exists(export_dir):
        tf.gfile.DeleteRecursively(export_dir)
    graph_def = get_graph_def_from_file(graph_filepath)
    with tf.Session(graph=tf.Graph()) as session:
        tf.import_graph_def(graph_def,name='')
        inputs = {name_map['{}:0'.format(node.name)]: 
            session.graph.get_tensor_by_name(
                '{}:0'.format(node.name))
            for node in graph_def.node if node.op=='Placeholder'}
        outputs = {'class_ids': session.graph.get_tensor_by_name(
            'head/predictions/class_ids:0')}
        signature = tf.saved_model.signature_def_utils.predict_signature_def(
    inputs=inputs,outputs=outputs)
        session.run([tf.global_variables_initializer(),tf.tables_initializer()])
        b = tf.saved_model.builder.SavedModelBuilder(export_dir)
        b.add_Meta_graph_and_variables(session,[tag_constants.SERVING],signature_def_map={'predict':signature},legacy_init_op = tf.group(tf.tables_initializer(),name='legacy_init_op'))
        b.save()
    print('Optimized graph converted to SavedModel!')

这将正确创建SavedModel文件

然后进行预测,遗留代码使用

self.predictor = tensorflow.contrib.predictor.from_saved_model(model_path. signature_def_key="predict" 
predictions = self.predictor(Feed_dict)

Feed_dict包含数据的地方。

在这一点上,但是出现以下错误

in predict(self,df,Feed_dict,single_Feed_dict)
    218             raise Exception('You must provide a df or a Feed_dict to predict')
    219 
--> 220         predictions = self.predictor(Feed_dict)
    221 
    222         return predictions

venv_py3.7/lib/python3.7/site-packages/tensorflow_core/contrib/predictor/predictor.py in __call__(self,input_dict)
     75       if value is not None:
     76         Feed_dict[self.Feed_tensors[key]] = value
---> 77     return self._session.run(fetches=self.fetch_tensors,Feed_dict=Feed_dict)

venv_py3.7/lib/python3.7/site-packages/tensorflow_core/python/client/session.py in run(self,fetches,options,run_Metadata)
    954     try:
    955       result = self._run(None,options_ptr,--> 956                          run_Metadata_ptr)
    957       if run_Metadata:
    958         proto_data = tf_session.TF_GetBuffer(run_Metadata_ptr)

venv_py3.7/lib/python3.7/site-packages/tensorflow_core/python/client/session.py in _run(self,handle,run_Metadata)
   1178     if final_fetches or final_targets or (handle and Feed_dict_tensor):
   1179       results = self._do_run(handle,final_targets,final_fetches,-> 1180                              Feed_dict_tensor,run_Metadata)
   1181     else:
   1182       results = []

venv_py3.7/lib/python3.7/site-packages/tensorflow_core/python/client/session.py in _do_run(self,target_list,fetch_list,run_Metadata)
   1357     if handle is None:
   1358       return self._do_call(_run_fn,Feeds,targets,-> 1359                            run_Metadata)
   1360     else:
   1361       return self._do_call(_prun_fn,fetches)

venv_py3.7/lib/python3.7/site-packages/tensorflow_core/python/client/session.py in _do_call(self,fn,*args)
   1382                     '\nsession_config.graph_options.rewrite_options.'
   1383                     'disable_Meta_optimizer = True')
-> 1384       raise type(e)(node_def,op,message)
   1385 
   1386   def _extend_graph(self):

FailedPreconditionError: Table not initialized.

我使用python 3.7和tensorflow 1.15。

有人可以帮忙吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)