暂且开辟一块文章记录遇到过的 error 和解决方法。杂七杂八的错误先放到一篇文章里,随着之后的积累再进行分类整理。



0x01

报错信息

$\color{blue}{\text{InvalidArgumentError: Matrix size-incompatible: In[0]: [1,7], In[1]: [1,7]}}$

复现

1
model.compile(loss='binary_crossentropy', optimizer=adam, metrics=['accuracy',precision,recall])

可能原因

model.complie()Loss 参数的形状错误。

解决方法

修改传入 Losstensor 的形状。

解决进度 : $\color{green}{已解决}$



0x10

报错信息

$\color{blue}{\text{Failed to get convolution algorithm. This is probably because cuDNN failed to initialize,}}$
$\color{blue}{\text{so try looking to see if a warning log message was printed above. [Op:Conv2D]}}$

复现

配置 CUDAtensorflow 时出现。

在使用 tf.test.if_gpu_avaliable() 时显示 GPU 可以使用,但是在编译的时候提示此错误。

可能原因

内存不足。tensorflow 默认会使用全部的内存资源,因此可能会导致提示内存不足。

解决方法

通过以下方式开启按需分配内存

方法一:
指定某块 GPU 运行程序。但我的电脑只有一块 GPU,所以这个方法不可行

1
2
import os
os.environ['CUDA_VISIBLE_DEVICES'] = '0'

方法二:
限制 GPU 资源使用

1
2
3
4
import tensorflow as tf
config = tf.compat.v1.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.3 #控制使用 30% 的内存
sess = tf.compat.v1.Session(config=config)

以上是网上的解决方法。但出于未知原因,仍然会报相同的错误。

解决进度 : $\color{red}{未解决}$



0x11

报错信息

$\color{blue}{\text{Error occurred when finalizing GeneratorDataset iterator: Failed precondition:}}$ $\color{blue}{\text{Python interpreter state is not initialized. The process may be terminated. [[{{node PyFunc}}]]}}$


复现

Python: 3.8
GPU: RTX3070
CUDA: 11.2
cudnn: 8.1
tensorflow-gpu/cpu: 2.5.3

在训练 ASRT 模型时会出现此错误

原因分析

网上找到的原因大概有这么几种:

  1. 定义卷积层第一层时,模型实际输入的 input_size 与定义时设定的 input_shape 不符或未定义造成。
  2. train_generatorvalidate_generator 相关参数没有保持一致,比如 batch_sizetarget_sizeclass_mode
  3. 本身配置限制,batch_size 改小试试,甚至改到 1 试试。
  4. 上一次程序运行没有彻底结束。

但是这几种都不是我的程序问题所在。这里其实还有一种情况会导致此 bug:

  1. python 版本为 3.8,与 tensorflow 版本不符

解决方法

Python 退版本至 3.7

解决进度 : $\color{green}{已解决}$