Looking-to-Listen-at-the-Cocktail-Party

1.has no attribute ‘_TensorLike’

原因

  • 这个错误的原因可能是kerastensorflow的版本不匹配。

解决办法

  • 网上的办法比较多,我把tensorflow的版本降低解决了这个问题
    • keras==2.3.1
    • tensorlow==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
2
plt.plot(history.history['acc'])
plt.plot(history.history['val_acc'])

原因

  • 在编译模型时,可能没有添加acc作为度量
  • 版本不匹配

解决办法

  • 对于度量问题

    1
    model.compile(optimizer=..., loss=..., metrics=['accuracy'])#可能没有metrics=['accuracy']导致问题
  • 对于版本问题

    • keras库老版本中参数是accval_acc
    • keras库新版本中参数是accuracyval_accuracy

4.Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure

绘图的时候出现这个问题。

解决办法

在所有导入包后面加上

1
2
3
import matplotlib as mpl
import matplotlib as plt
mpl.use('TkAgg')

但是需要有tkinter包,在Linux中需要

1
sudo apt-get install python3-tk

5.ValueError:Unkonwn loss function:loss_func

加载模型的时候出现了这个错误。

原因

(36条消息) ValueError: Unknown loss function_dugudaibo的博客-CSDN博客

主要是因为使用了自定义的loss_functionkeras里没有这个loss_function,所以需要手动的指定损失函数。

解决办法

1
2
#train.py 69行
AV_model = load_model(latest_file, custom_objects={"tf":tf, "loss_func":audio_loss()})#注意这里是audio_loss()

然而,值得注意的是,这里自定义的损失函数使用了函数嵌套,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-gpucuda版本相匹配

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
2
3
import tensorflow as tf
tf.config.list_physical_devices('GPU')
#[]没有GPU被检测到

原因

(37条消息) 2021最新:TensorFlow各个GPU版本CUDA和cuDNN对应版本整理(最简洁)_K1052176873的博客-CSDN博客

原因是tensorflow-gpucuda版本不匹配。

这也是直接导致问题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
2
3
sudo apt-get install -y --no-install-recommends libnvinfer6=6.0.1-1+cuda10.1\
libnvinfer-dev=6.0.1-1+cuda10.1\
libnvinfer-plugin6=6.0.1-1+cuda10.1\