ImportError: cannot import name ‘Adam‘ from ‘keras.optimizers‘
原因:
keras 库更新后包导入方式改变,Adam 导入已更改。
解决方案:
将from keras.optimizers import Adam改为如下:
from keras.optimizers import adam_v2
调用:
adam_v2.Adam(lr=0.001, beta_1=XX, beta_2=XX, epsilon=XX)
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x8d in position 79: illegal multibyte sequence
原因:
打开txt文件的错误,python中默认的txt文件编码方式是 “ gbk ”,Windows的文件默认的编码方式是 “ utf-8 ”
解决方案:
设置代码中所有打开文件方式encoding=‘UTF-8’
例如:
open(classes_path,encoding='UTF-8')
AttributeError: module ‘keras.backend’ has no attribute ‘control_flow_ops’
原因:
Keras没办法调用control_flow_ops
解决方案:
直接用tensorflow调用, import tensoflow as tf
改为:
_, ignore_mask = tf.while_loop(lambda b,*args: b < m, loop_body, [0, ignore_mask])
在python终端执行命令convert.py yolov3.cfg yolov3.weights model_data/yolo.h5,没有报错,没有生成新的权重文件
百思不得其解,我在Anaconda命令行执行命令,报错找不到xx.dll文件,查找原因后得出是keras和tensorflow版本不对应问题,重新下载tensorflow,执行对应命令如下,在Anaconda中成功生成.h5文件。
然而,在python终端还是无法生成,查看File-settings
右边的包还是之前的高级版本(但是我已经卸载了这个版本就很奇怪)(搞清楚了,是使用命令卸载之后那个版本的相关文件没删除干净,所以会显示在这里),下载的匹配的版本在pycharm中找不到,在python的终端还是无法生成…找了很多帖子之后,发现最终原因很可能是:
Anaconda下下载的包无法导入python,因此终端执行命令时版本不匹配,无法生成文件,这个问题先放在这儿,改天好好研究解决…
使用Anaconda下生成的keras权重文件进行训练。
Errors may have originated from an input operation. Input Source operations connected to node conv2d_7/Conv2D/ReadVariableOp:…
版本问题,注意查看你的代码官网要求的tensorflow版本和与之对应的keras版本,重新配置环境
两个我遇到过的问题,参考这个博主的一篇文章
这个链接
from tensorflow.tools.docs import doc_controls
ModuleNotFoundError: No module named ‘tensorflow.tools’
emmmm,查了很多方法,试着降低tensorflow版本都没用,最后在
路径E:\Anaconda3\Lib\site-packages\tensorflow\下查看,没有名为tools的文件夹,但有一个Tools,所以将文件夹的名字改为tools,解决了,泪目。
执行命令:
pip uninstall keras -y
pip uninstall keras-nightly -y
pip uninstall keras-Preprocessing -y
pip uninstall keras-vis -y
pip uninstall tensorflow -y
pip install tensorflow == 2.3.0
pip install keras == 2.4
原回答
一番操作问题是解决了,但是不是很明白为蛇么,之前安装的tf和keras版本也是匹配的,不知道是卸载一些东西解决了这个bug,还是安装上述指定版本的keras解决了问题。。。
这个链接
我用了第一种方法解决了
K.learning_phase(): 0
TypeError: Tensor is unhashable. Instead, use tensor.ref() as the key.
解决办法:
import tensorflow
tensorflow.compat.v1.disable_v2_behavior()
禁用tensorflow 2.x的动作
tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine
tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'cudart64_110.dll'; dlerror: cudart64_110.dll not found
一些后记,有感而发,就写在这里吧…
跑代码过程中的百分之八十问题都是配置环境问题,有时源代码中的函数可能调用的了tensorflow 1.x中的某个函数,而新版本中没有这个函数或者函数调用方式改变就会有错误,又或者你安装了高级版本没有卸载干净或者别的什么问题,产生兼容错误,,,就十分泪目。所以在跑数据之前一定要按官网上给出的环境配置来做好准备工作,才能省下不必要的庸庸碌碌。
在训练自己的数据集之前学习别人的博客,有的大佬比较专业,所以一些细节一笔带过,对于我这种小白来说就迷惑,只能多看其他同类博客搞清楚问题。但有一个问题就是,看了一篇keras-YOLOv3训练数据集,觉得自己可以,于是乎下载源码下来,先运行一下结果出现了问题,对自己感到怀疑。又看到有很多darknet-master的例子,又下载源码去试试,最后又感觉这些都不足够详细,又下载大佬改过做过注释的代码,看了视频讲解来调试,结果又出现无法预料的错误,就又反复横跳,又去调试原来的代码…浪费了很多时间。所以说选定了一个代码还是要坚定一点,感到迷惑的地方多找找讲解,还要触类旁通,每个人跑数据都会有千千万万个不同的bug,有时你完全按照别人的教程来也会出现没有过的问题,这是就要多搜索,找不到一模一样的问题解答就找相似类问题解决办法,多尝试,有时,也许你为了解决一个问题改了两句代码,这个bug解决了但是下个bug就是你改的这两句导致的,只能不断debug,debug,debug…至少代码终于跑起来的那刻是有成就感的。
与君共勉。。。