博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TensorFlow中关于Sess和Graph的坑
阅读量:4142 次
发布时间:2019-05-25

本文共 1432 字,大约阅读时间需要 4 分钟。

多线程跑TensorFlow多分类模型时遇到报错:

  • FailedPreconditionError: Error while reading resource variable the variable was uninitialized
  • Failed to get convolution algorithm. This is probably because cuDNN failed to initialize
  • RuntimeError:The Session graph is empty.

代码如下:

在主函数中初始化模型import tensorflow as tftf.compat.v1.logging.set_verbosity(tf.compat.v1.logging.ERROR) # 屏蔽WARNING★★mPath = r'model_VGG16_Straka.h5'model = tf.keras.models.load_model(mPath) =================================================================在另一个线程中进行分类img = cv.cvtColor(np.asarray(frame), cv.COLOR_BGR2RGB).reshape((1,720,1280,3))/255result = [classes[k] for k in np.argmax(np.asarray(model.predict(img, verbose=0, batch_size=1)),axis=1)]

问题所在:

在另一个线程/函数中,tf 2.1会认为是另一个程序在进行计算,我们需要保证只使用同一个session,因此需要将会话和图迁移过去。
注意:只要出现了模型预测的地方,都需要加下面的 代码

在主函数中初始化模型并记录当前会话和图mPath = r'model_VGG16_Straka.h5'model = tf.keras.models.load_model(mPath,{
'focal_loss_fixed': focal_loss(alpha=.25, gamma=2)}) graph = tf.get_default_graph()sess = tf.keras.backend.get_session() # 注意!!!多线程会导致sess和graph不同 必须提前记录下★★=================================================================在另一个线程中进行分类with sess.as_default(): with graph.as_default(): # 注意!!!多线程会导致sess和graph不同 必须在每次预测前手动更改 img = cv.cvtColor(np.asarray(frame), cv.COLOR_BGR2RGB).reshape((1,720,1280,3))/255 result = [classes[k] for k in np.argmax(np.asarray(model.predict(img, verbose=0, batch_size=1)),axis=1)]

转载地址:http://drzti.baihongyu.com/

你可能感兴趣的文章
CentOS7 安装MySQL 5.6.43
查看>>
使用Java 导入/导出 Excel ----Jakarta POI
查看>>
本地tomcat 服务器内存不足
查看>>
IntelliJ IDAE 2018.2 汉化
查看>>
基于S5PV210的uboot移植中遇到的若干问题记录(一)DM9000网卡移植
查看>>
Openwrt源码下载与编译
查看>>
我和ip_conntrack不得不说的一些事
查看>>
Linux 查看端口使用情况
查看>>
文件隐藏
查看>>
两个linux内核rootkit--之二:adore-ng
查看>>
两个linux内核rootkit--之一:enyelkm
查看>>
关于linux栈的一个深层次的问题
查看>>
rootkit related
查看>>
配置文件的重要性------轻化操作
查看>>
又是缓存惹的祸!!!
查看>>
为什么要实现程序指令和程序数据的分离?
查看>>
我对C++ string和length方法的一个长期误解------从protobuf序列化说起(没处理好会引起数据丢失、反序列化失败哦!)
查看>>
一起来看看protobuf中容易引起bug的一个细节
查看>>
无protobuf协议情况下的反序列化------貌似无解, 其实有解!
查看>>
make -n(仅列出命令, 但不会执行)用于调试makefile
查看>>