错题本
暂且开辟一块文章记录遇到过的 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
参数的形状错误。
解决方法
修改传入 Loss
的 tensor
的形状。
解决进度 : $\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]}}$
复现
配置 CUDA
和 tensorflow
时出现。
在使用 tf.test.if_gpu_avaliable()
时显示 GPU
可以使用,但是在编译的时候提示此错误。
可能原因
内存不足。tensorflow
默认会使用全部的内存资源,因此可能会导致提示内存不足。
解决方法
通过以下方式开启按需分配内存
方法一:
指定某块 GPU
运行程序。但我的电脑只有一块 GPU
,所以这个方法不可行
1 | import os |
方法二:
限制 GPU
资源使用
1 | import tensorflow as tf |
以上是网上的解决方法。但出于未知原因,仍然会报相同的错误。
解决进度 : $\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 模型时会出现此错误
原因分析
网上找到的原因大概有这么几种:
- 定义卷积层第一层时,模型实际输入的
input_size
与定义时设定的input_shape
不符或未定义造成。 train_generator
和validate_generator
相关参数没有保持一致,比如batch_size
,target_size
,class_mode
等- 本身配置限制,
batch_size
改小试试,甚至改到 1 试试。 - 上一次程序运行没有彻底结束。
但是这几种都不是我的程序问题所在。这里其实还有一种情况会导致此 bug:
- python 版本为 3.8,与 tensorflow 版本不符
解决方法
Python 退版本至 3.7
解决进度 : $\color{green}{已解决}$