问题描述
我需要优化传统的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 (将#修改为@)