跑“Looking-to-Listen-at-the-Cocktail-Party”程序时出现的BUG及解决办法
Looking-to-Listen-at-the-Cocktail-Party
1.has no attribute ‘_TensorLike’
原因
- 这个错误的原因可能是
keras
和tensorflow
的版本不匹配。
解决办法
- 网上的办法比较多,我把
tensorflow
的版本降低解决了这个问题keras
==2.3.1tensorlow
==2.0.0
2.ValueError:bad marshal data(unkonwn type code)
原因
这是在加载FaceNet
的预训练模型facenet_keras.h5
时出现的问题,主要原因是keras
版本和模型需要的keras
版本不匹配。事实上在我这的原因似乎是Python的版本不匹配导致的?这个项目Python==3.7
,我是3.8的Python。
解决办法
重装虚拟环境,用Python==3.7
重装所有包
3.KeyError:‘acc’和KeyError:‘val_acc’
1 | plt.plot(history.history['acc']) |
原因
- 在编译模型时,可能没有添加
acc
作为度量 - 版本不匹配
解决办法
-
对于度量问题
1
model.compile(optimizer=..., loss=..., metrics=['accuracy'])#可能没有metrics=['accuracy']导致问题
-
对于版本问题
keras
库老版本中参数是acc
和val_acc
keras
库新版本中参数是accuracy
和val_accuracy
4.Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure
绘图的时候出现这个问题。
解决办法
在所有导入包后面加上
1 | import matplotlib as mpl |
但是需要有tkinter
包,在Linux
中需要
1 | sudo apt-get install python3-tk |
5.ValueError:Unkonwn loss function:loss_func
加载模型的时候出现了这个错误。
原因
(36条消息) ValueError: Unknown loss function_dugudaibo的博客-CSDN博客
主要是因为使用了自定义的loss_function
而keras
里没有这个loss_function
,所以需要手动的指定损失函数。
解决办法
1 | #train.py 69行 |
然而,值得注意的是,这里自定义的损失函数使用了函数嵌套,loss_func
实际上是audio_loss
的内层函数。如果直接"loss_func":audio_loss
会报错。参考python中函数嵌套、函数作为变量以及闭包的原理 - 夏晓旭 - 博客园 (cnblogs.com)。可以知道通过audio_loss()
调用内层函数的引用,也就是相当于loss_func
。
6.Error:8nQBG5hvjpk:YouTube said:Unable to extract video data
原因
不知道
解决办法
跟新youtube-dl
:“Updating youtube-dl
helped me. Depending on the way you installed it, here are the commands”。所以要根据具体安装的方法跟新:
youtube-dl --update
(self-update)pip install -U youtube-dl
(Python)brew update youtube-dl
(macOS+homebrew)choco upgrade youtube-dl
(windows+Chocolatey)
7.ValueError:To call multi_gpu_model
with gpu=2
, we expect the following devices to be available: [‘/cpu:0’, ‘/gpu:0’, ‘/gpu:1’]. However this machine only has: [‘/cpu:0’]
在使用多GPU
进行训练的时候,出现这个问题。
这个问题可以通过直接用CPU
训练来避免,但是CPU
速度太慢,两天只能训练3个epoch
,我设置的100个epoch
要训练2个月!!!
在解决这个问题的过程中也出现了很多其他问题。
解决这个问题,需要:
tensorflow-gpu
tensorflow-gpu
和cuda
版本相匹配
7.1 No module named tensorflow
原因
我之前下载的是tensorflow==2.0.0
,而没有下载tensorflow-gpu
。从网上的资料来看,前者也是可以使用GPU的,但是我还是重新下载了GPU的版本。
但当我下载好tensorflow-gpu
然后删除tensorflow
后出现了上述错误。
解决办法
(37条消息) 电脑上同时安装了tensorflow和tensorflow-gpu,如何默认使用tensorflow-gpu_NuerNuer的博客-CSDN博客
卸载并重新安装tensorflow-gpu
即可解决。
7.2 检测不到GPU的tensorflow
1 | import tensorflow as tf |
原因
(37条消息) 2021最新:TensorFlow各个GPU版本CUDA和cuDNN对应版本整理(最简洁)_K1052176873的博客-CSDN博客
原因是tensorflow-gpu
和cuda
版本不匹配。
这也是直接导致问题7的原因
解决办法
CUDA
版本是8.1.0
,对应tensorflow==2.1.0/2.2.0/2.3.0
,所以要将tensorflow
进行跟新
7.3 Warning: Could not load dynamic library ‘libnvinfer.so.6’
原因
没有安装TensorRT
解决办法
- 删了
tensorflow==2.1.0
,重新安装或者安装更高版本 - 安装
TensorRT
1 | sudo apt-get install -y --no-install-recommends libnvinfer6=6.0.1-1+cuda10.1\ |