keras报错:AttributeError: '_thread._local' object has no attribute 'value'
需求是使用pyqt5中的槽函数运行keras模型训练,为了不让工具在模型训练的过程中出现假死的现象,于是把训练操作放到单独的线程中运行,于是问题来了,训练操作在主线程运行时正常,但是界面假死,假若训练在单独的线程中运行就会出现下面这个问题。
网上对此错误的解释是keras和TensorFlow的版本不对,但是并没有解释为什么,一开始我是怀疑的,为什么在主线程中能够正常运行,单独开一个线程时就不行了,这为什么是版本的问题?
定位到错误代码的地方,如下图所示,问题是_SYMBOLIC_SCOPE这个对象没有value这个值。
接着我们定位到_SYMBOLIC_SCOPE创建的位置,如下图所示,我们发现在这个_SYMBOLIC_SCOPE创建之后马上就给他赋值value。
那问题来了为什么会出现value找不到呢?其实关键是_SYMBOLIC_SCOPE = threading.local()这个函数,作用就是将不同线程的值分隔开,即单独开一个线程运行时通过_SYMBOLIC_SCOPE是取不到另一个线程中给_SYMBOLIC_SCOPE添加的值。
那么问题又来了,value值是在哪个线程中赋值的呢?如下图所示,其实我们可以发现当import keras的时候,会等待一会的时间,其实是TensorFlow会在后台起一个线程作为守护线程,守护线程执行上面的操作,当我们单独再起一个线程运行时,新的线程是无法取到守护线程赋予的value值,所以就会出错。具体为什么这样实现暂时还不清楚,反正就是多线程去运行keras是不可以,我甚至想过结束后台线程或者更改keras的代码,手动给_SYMBOLIC_SCOPE .value赋值,虽然程序可以正常运行,但是引入了不确定的风险。
最后回头去思考版本的问题,出错的版本的2.3.1,然后找到一个2.2.4版本的keras去看代码发现没有_SYMBOLIC_SCOPE这个操作,所以使用这个版本后单独开一个线程是可以正常运行的。
注意:
1、keras版本更改之后可能会出现TensorFlow、Numpy报错现象,可能是版本不匹配,重新选择一个可用的版本即可,下面是我使用版本
keras == 2.2.4
TensorFlow == 1.13.1
Numpy == 1.16.0
python == 3.7
2、出错的文件是keras/backend/tensorflow_backend.py,两个版本的此文件代码差异较大。
keras报错:AttributeError: '_thread._local' object has no attribute 'value'的更多相关文章
- ansible报错AttributeError: module 'urllib.request' has no attribute 'HTTPSHandler'
报错内容: TASK [activemq : extract activemq tarball] *************************************************** ...
- py+selenium 明明定位不到元素,但却不报错或是报错AttributeError: 'list' object has no attribute 'click'【已解决】
问题:定位不到元素,但却不报错或者出现报错AttributeError: 'list' object has no attribute 'click' 如图 或者 解决方法: 将”driver ...
- dnspython模块报错 AttributeError: 'CNAME' object has no attribute 'address'
有时候用到这个模块的时候会报错 AttributeError: 'CNAME' object has no attribute 'address' 如下所示 [root@ansible ch01]# ...
- 关于moviepy打包报错AttributeError: module audio/video.fx.all has no attribute fadein、crop文章的纠错和抄袭
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 老猿前面有篇文章<moviepy应用pyin ...
- moviepy应用pyinstaller打包后执行报错AttributeError: module audio/video.fx.all has no attribute fadein、crop
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在开发moviepy的Python程序使用pyinstaller打包后 ...
- AttributeError: '_csv.reader' object has no attribute 'next'
我在使用pyhon3.4运行以下代码时报错:AttributeError: '_csv.reader' object has no attribute 'next' import csv import ...
- AttributeError: 'sys.flags' object has no attribute 'utf8_mode'
AttributeError: 'sys.flags' object has no attribute 'utf8_mode' pycharm工程的py版本是3.6,结果即使使用py3.7编译后的py ...
- springboot项目启动报错Failed to configure a DataSource: 'url' attribute is not specified and no embedde
springboot项目启动报错Failed to configure a DataSource: 'url' attribute is not specified and no embedde 创建 ...
- 关于flask登录视图报错AttributeError: '_AppCtxGlobals' object has no attribute 'user'
在一个小程序中写了一个登录视图函数,代码如下: @app.route('/login',methods = ['GET','POST']) @oid.loginhandler def login(): ...
随机推荐
- HDOJ 1078
标准的DAG上的DP,其实之前一直不大想得明白为什么dp[i][j]为什么一定是在(i,j)状态上的局部最优解了呢? 其实仔细想想和我一般所做的DP是一个道理,因为运用dfs的方法,因此可以确定的是, ...
- Codeforces Round #570 (Div. 3) G. Candy Box (hard version) (贪心,优先队列)
题意:你有\(n\)个礼物,礼物有自己的种类,你想将它们按种类打包送人,但是打包的礼物数量必须不同(数量,与种类无关),同时,有些礼物你想自己留着,\(0\)表示你不想送人,问你在送出的礼物数量最大的 ...
- JavaScript——内置对象
- 如何安装Gephi工具
gephi中文版是一款开源免费跨平台基于JVM的复杂网络分析软件,安装后需要安装Java jdk API,否则就会出现gephi打不开的情况 该工具主要用于各种网络和复杂系统,动态和分层图的交互可视化 ...
- CF1474-B. Different Divisors
CF1474-B. Different Divisors 题意: 题目给出你一个\(d\),要求你找出一个数字\(y\),找到的\(y\)至少有四个整数因子并且任意两个因子之间的差至少为\(d\). ...
- 带有Python的音频处理(附带源码)
由于博客播放不了音频,所以音频将以视频形式展现.公众号也正在进行抽书 音频素材请点击这里进行观看 往下拉就是文章地址 有时,在进行编程时,我们需要进行一些音频处理.编程中最常用的音频处理任务包括–加载 ...
- 关于TCP状态TIME_WAIT的理解
1.TIME_WAIT的作用: TIME_WAIT状态存在的理由:1)可靠地实现TCP全双工连接的终止 在进行关闭连接四次挥手协议时,最后的ACK是由主动关闭端发出的,如果这个最终的ACK丢失,服务器 ...
- SPOJ SUBST1 New Distinct Substrings(后缀数组 本质不同子串个数)题解
题意: 问给定串有多少本质不同的子串? 思路: 子串必是某一后缀的前缀,假如是某一后缀\(sa[k]\),那么会有\(n - sa[k] + 1\)个前缀,但是其中有\(height[k]\)个和上一 ...
- 实现 MyBatis 流式查询的方法
基本概念流式查询指的是查询成功后不是返回一个集合而是返回一个迭代器,应用每次从迭代器取一条查询结果.流式查询的好处是能够降低内存使用.如果没有流式查询,我们想要从数据库取 1000 万条记录而又没有足 ...
- keras自定义网络层
在深度学习领域,Keras是一个高度封装的库并被广泛应用,可以通过调用其内置网络模块(各种网络层)实现针对性的模型结构:当所需要的网络层功能不被包含时,则需要通过自定义网络层或模型实现. 如何在ker ...