解决方案

在Tensorflow中,所有操作对象都包装到相应的Session中的,所以想要使用不同的模型就需要将这些模型加载到不同的Session中并在使用的时候申明是哪个Session,从而避免由于Session和想使用的模型不匹配导致的错误。

而使用多个graph,就需要为每个graph使用不同的Session,但是每个graph也可以在多个Session中使用,这个时候就需要在每个Session使用的时候明确申明使用的graph。

g1 = tf.Graph() # 加载到Session 1的graph
g2 = tf.Graph() # 加载到Session 2的graphsess1 = tf.Session(graph=g1) # Session1
sess2 = tf.Session(graph=g2) # Session2# 加载第一个模型
with sess1.as_default(): with g1.as_default():tf.global_variables_initializer().run()model_saver = tf.train.Saver(tf.global_variables())model_ckpt = tf.train.get_checkpoint_state(“model1/save/path”)model_saver.restore(sess, model_ckpt.model_checkpoint_path)
# 加载第二个模型
with sess2.as_default():  # 1with g2.as_default():  tf.global_variables_initializer().run()model_saver = tf.train.Saver(tf.global_variables())model_ckpt = tf.train.get_checkpoint_state(“model2/save/path”)model_saver.restore(sess, model_ckpt.model_checkpoint_path)...# 使用的时候
with sess1.as_default():with sess1.graph.as_default():  # 2...with sess2.as_default():with sess2.graph.as_default():...# 关闭sess
sess1.close()
sess2.close()

注:

1、在1处使用as_default使session在离开的时候并不关闭,在后面可以继续使用知道手动关闭;

2、由于有多个graph,所以sess.graph与tf.get_default_value的值是不相等的,因此在进入sess的时候必须sess.graph.as_default()明确申明sess.graph为当前默认graph,否则就会报错。

3、不同框架的模型(tf, caffe, torch等)在加载的很有可能导致底层的cuDNN分配出现问题从而报错,这种一般可以尝试通过模型的加载顺序来解决。

参考文章

https://www.tensorflow.org/api_docs/python/tf/Session

https://stackoverflow.com/questions/41607144/loading-two-models-from-saver-in-the-same-tensorflow-session

https://stackoverflow.com/questions/39175945/run-multiple-pre-trained-tensorflow-nets-at-the-same-time

Tensorflow同时加载使用多个模型

TensorFlow——加载和使用多个模型解决方案相关推荐

  1. Tensorflow加载预训练模型和保存模型(ckpt文件)以及迁移学习finetuning

    使用tensorflow过程中,训练结束后我们需要用到模型文件.有时候,我们可能也需要用到别人训练好的模型,并在这个基础上再次训练.这时候我们需要掌握如何操作这些模型数据.看完本文,相信你一定会有收获 ...

  2. Tensorflow 加载预训练模型和保存模型

    使用tensorflow过程中,训练结束后我们需要用到模型文件.有时候,我们可能也需要用到别人训练好的模型,并在这个基础上再次训练.这时候我们需要掌握如何操作这些模型数据.看完本文,相信你一定会有收获 ...

  3. tensorflow加载预训练好的模型图(.pb文件)

    千万不要试图在jupyter notebook中打开.pb模型文件,否则你会得到: 这时候我以为shi编码的问题,开始转换编码,转换完成后发现shi乱ma. 后来网上查了,.pb文件里面存储的shi模 ...

  4. TensorFlow 加载多个模型的方法

    采用 TensorFlow 的时候,有时候我们需要加载的不止是一个模型,那么如何加载多个模型呢? 原文:https://bretahajek.com/2017/04/importing-multipl ...

  5. TensorFlow 加载多个模型的方法 - 知乎 https://zhuanlan.zhihu.com/p/53642222

    TensorFlow 加载多个模型的方法 - 知乎 什么是Tensorflow模型? 当你训练好一个神经网络后,你会想保存好你的模型便于以后使用并且用于生产.因此,什么是Tensorflow模型?Te ...

  6. amba simple class驱动_学习笔记:class加载器和双亲委派模型

    类加载器 类加载器有四种 启动类加载器(Bootstrap ClassLoader) 负责加载 JAVA_HOMElib ⽬录中的,或通过-Xbootclasspath参数指定路径中的且被虚拟机认可( ...

  7. java类验证和装载顺序_Java类的加载机制和双亲委派模型

    Java类的加载机制和双亲委派模型 1类的加载机制 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加载(Loading).验证(Verification).准备(Prepar ...

  8. python如何保存训练好的模型_Python机器学习7:如何保存、加载训练好的机器学习模型...

    本文将介绍如何使用scikit-learn机器学习库保存Python机器学习模型.加载已经训练好的模型.学会了这个,你才能够用已有的模型做预测,而不需要每次都重新训练模型. 本文将使用两种方法来实现模 ...

  9. DevExpress 使用 XtraTabbedMdiManager 控件以 Tab样式加载 Mdi窗体并合并 RibbonControl 解决方案

    DevExpress 使用 XtraTabbedMdiManager 控件以 Tab样式加载 Mdi窗体并合并 RibbonControl 解决方案 参考文章: (1)DevExpress 使用 Xt ...

最新文章

  1. python中 s是什么意思_什么是Pandas?Pandas学习什么?
  2. 修改windows系統下xampp中apache端口被其他程式占用的問題
  3. 【Sphinx】MySQL+Sphinx 全文检索的使用和测试
  4. 1.3 Quick Start中 Step 3: Create a topic官网剖析(博主推荐)
  5. CentOS 6.3安装(详细图解教程)
  6. r graphics installing package
  7. 设计模式:迭代器模式(Iterator)
  8. shell对于字符串的操作
  9. fofa自动化爬虫脚本更新+详解
  10. 【数据库】数据库基本概念:数据库管理系统 / 数据库 / 表 / 数据
  11. LeetCode 655. 输出二叉树(二叉树高度二叉树遍历)
  12. CAN总线技术 | 物理层04 - 终端电阻与双绞线(特性阻抗120欧)
  13. Java之戳中痛点 - (6)避免类型自动转换,例如两个整数相除得浮点数遇坑
  14. 解决windows 2003 无法安装vss2005的问题
  15. Java个人职业规划目标改进_java个人职业发展方向规划范文
  16. 《Intel汇编语言程序设计》环境搭建
  17. 质量免费--读书笔记(上篇)
  18. java 在线excel_Java实现最简单的在线打开保存Excel文件
  19. NoSQL 数据库和传统关系型数据库到底有什么区别?
  20. 「SwiftUI」延迟执行代码

热门文章

  1. c语言查找功能的怎么使用方法,求C语言实现查询功能(如果选择3,如何实现查询)...
  2. R星服务器修改声望,从《荒野大镖客2》Online更新,我们可以看出R星的新思路
  3. python热部署_定时任务-Quartz(热部署、冷部署)
  4. matlab矩阵转入tecplot,利用Tecplot导入MATLAB计算结果数据进行三维可视化
  5. java堆设置成多少合适_jvm~xmx设置多少合适
  6. linux界面添加地址,Linux系统下图形界面更改IP地址
  7. android控件常用的属性,android?常用的控件属性
  8. dubbo k8s 服务发现_服务化改造实践(二)| Dubbo + Kubernetes
  9. centos编译安装python_centos编译安装python3.6.4
  10. Spark的stage划分算法源码分析