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的描述符(descriptor)、装饰器(property)造成的一个无限递归问题分享
Jul 09 Python
Python的另外几种语言实现
Jan 29 Python
python正则中最短匹配实现代码
Jan 16 Python
pandas 对series和dataframe进行排序的实例
Jun 09 Python
通过python顺序修改文件名字的方法
Jul 11 Python
python的常用模块之collections模块详解
Dec 06 Python
python调用摄像头拍摄数据集
Jun 01 Python
Django集成搜索引擎Elasticserach的方法示例
Jun 04 Python
在Django admin中编辑ManyToManyField的实现方法
Aug 09 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
Apr 22 Python
python中字典增加和删除使用方法
Sep 30 Python
python绘制箱型图
Apr 27 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 删除cookie和浏览器重定向
2009/03/16 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
php文件缓存方法总结
2016/03/16 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
TimergliderJS 一个基于jQuery的时间轴插件
2011/12/07 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
node.js中的fs.fstat方法使用说明
2014/12/15 Javascript
Javascript编写2048小游戏
2015/07/07 Javascript
JS版元素周期表实现方法
2015/08/05 Javascript
阻止表单提交按钮多次提交的完美解决方法
2016/05/16 Javascript
BootStrap点击下拉菜单项后显示一个新的输入框实现代码
2016/05/16 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
vue系列之动态路由详解【原创】
2017/09/10 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
详解React的回调渲染模式
2020/09/10 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
[01:01:36]Optic vs paiN 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python中装饰器级连的使用方法示例
2017/09/29 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
详解Python自建logging模块
2018/01/29 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
Appium+python自动化之连接模拟器并启动淘宝APP(超详解)
2019/06/17 Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
2020/02/28 Python
米兰必去买手店排行榜首位:Antonioli
2016/09/11 全球购物
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
后备干部培训方案
2014/05/22 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL
nginx日志格式分析和修改
2022/04/28 Servers
Vue操作Storage本地化存储
2022/04/29 Vue.js