Tensorflow 同时载入多个模型的实例讲解


Posted in Python onJuly 27, 2018

有时我们希望在一个python的文件空间同时载入多个模型,例如 我们建立了10个CNN模型,然后我们又写了一个预测类Predict,这个类会从已经保存好的模型restore恢复相应的图结构以及模型参数。然后我们会创建10个Predict的对象Instance,每个Instance负责一个模型的预测。

Predict的核心为:

class Predict:
 def __init__(self....):
  创建sess
  创建恢复器tf.train.Saver
  从恢复点恢复参数:tf.train.Saver.restore(...)


 def predict(self,...):
  sess.run(output,feed_dict={输入})

如果我们直接轮流生成10个不同的Predict 对象的话,我们发现tensorflow是会报类似于下面的错误:

File "/home/jiangminghao/.local/lib/python3.5/site-packages/tensorflow/python/framework/errors_impl.py", line 466, in raise_exception_on_not_ok_status
 pywrap_tensorflow.TF_GetCode(status))
tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [256,512] rhs shape= [640,512]
   [[Node: save/Assign_14 = Assign[T=DT_FLOAT, _class=["loc:@fullcont/Variable"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/cpu:0"](fullcont/Variable, save/RestoreV2_14)]]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
 File "PREDICT_WITH_SPARK_DATAFLOW_WA.py", line 121, in <module>
 pre2=Predict(label=new_list[1])
 File "PREDICT_WITH_SPARK_DATAFLOW_WA.py", line 47, in __init__
 self.saver.restore(self.sess,self.ckpt.model_checkpoint_path)
 File "/home/jiangminghao/.local/lib/python3.5/site-packages/tensorflow/python/training/saver.py", line 1560, in restore
 {self.saver_def.filename_tensor_name: save_path})
 File "/home/jiangminghao/.local/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 895, in run
 run_metadata_ptr)
 File "/home/jiangminghao/.local/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1124, in _run
 feed_dict_tensor, options, run_metadata)
 File "/home/jiangminghao/.local/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1321, in _do_run
 options, run_metadata)
 File "/home/jiangminghao/.local/lib/python3.5/site-packages/tensorflow/python/client/session.py", line 1340, in _do_call
 raise type(e)(node_def, op, message)
tensorflow.python.framework.errors_impl.InvalidArgumentError: Assign requires shapes of both tensors to match. lhs shape= [256,512] rhs shape= [640,512]

关键就是:

Assign requires shapes of both tensors to match.意思是载入模型的时候 赋值失败。主要是因为不同对象里面的不同sess使用了同一进程空间下的相同的默认图graph。

正确的解决方法:

class Predict:
 def __init__(self....):
  self.graph=tf.Graph()#为每个类(实例)单独创建一个graph
  with self.graph.as_default():
    self.saver=tf.train.import_meta_graph(...)#创建恢复器
    #注意!恢复器必须要在新创建的图里面生成,否则会出错。
  self.sess=tf.Session(graph=self.graph)#创建新的sess
  with self.sess.as_default():
    with self.graph.as_default():
     self.saver.restore(self.sess,...)#从恢复点恢复参数

 def predict(self,...):
  sess.run(output,feed_dict={输入})

以上这篇Tensorflow 同时载入多个模型的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用urllib2模块获取gravatar头像实例
Dec 18 Python
python下os模块强大的重命名方法renames详解
Mar 07 Python
浅析使用Python操作文件
Jul 31 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 Python
Python调用graphviz绘制结构化图形网络示例
Nov 22 Python
Python itertools.product方法代码实例
Mar 27 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 Python
如何基于matlab相机标定导出xml文件
Nov 02 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 #Python
Python解决走迷宫问题算法示例
Jul 27 #Python
python保存文件方法小结
Jul 27 #Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
Jul 27 #Python
tensorflow 加载部分变量的实例讲解
Jul 27 #Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 #Python
Python切片操作深入详解
Jul 27 #Python
You might like
一个PHP二维数组排序的函数分享
2014/01/17 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
php获得文件夹下所有文件的递归算法的简单实例
2016/11/01 PHP
php中如何执行linux命令详解
2018/11/06 PHP
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
详解JavaScript函数绑定
2013/08/18 Javascript
jquery.validate使用详解
2016/06/02 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
jquery+ajax实现省市区三级联动效果简单示例
2017/01/04 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
Vue响应式原理详解
2017/04/18 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
vue form check 表单验证的实现代码
2018/12/09 Javascript
vue双向绑定及观察者模式详解
2019/03/19 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python实现网页链接提取的方法分享
2014/02/25 Python
python获取外网ip地址的方法总结
2015/07/02 Python
Python lambda表达式用法实例分析
2018/12/25 Python
Python 字符串池化的前提
2020/07/03 Python
python动态规划算法实例详解
2020/11/22 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
餐饮投资计划书
2014/04/25 职场文书
美食节策划方案
2014/05/26 职场文书
公司周年庆典标语
2014/10/07 职场文书
工作证明英文模板
2014/10/21 职场文书
2014年管理人员工作总结
2014/12/01 职场文书
建议书格式
2015/02/04 职场文书
请病假条范文
2015/08/17 职场文书
2016年春季趣味运动会开幕词
2016/03/04 职场文书
详解TypeScript中的类型保护
2021/04/29 Javascript
Python max函数中key的用法及原理解析
2021/06/26 Python
OpenCV实现普通阈值
2021/11/17 Java/Android