Tensorflow实战之常见问题

标签: 无 分类: 未分类 创建时间:2023-05-28 02:03:46 更新时间:2024-11-12 12:53:37

1.module ‘keras.preprocessing.image’ has no attribute ‘load_img’

引入 from keras.preprocessing.image import load_img 出现错误。

【解决方案】
tf.keras.utils.load_img instead of image.load_img.

2.Import “tensorflow.keras.preprocessing.image” could not be resolved

在vscode中使用import倒入,结果出现警告

【解决方案】

1
2
3
from tensorflow import keras
from keras.layers import Dense
from keras.models import Sequential, load_model

3.Call to CreateProcess failed. Error code: 2, command: ‘“ptxas.exe” “–version”‘

在执行预测的时候,出现了这个问题。我尝试: conda install -c conda-forge cudatoolkit-dev,结果无效。

【解决方案】
解决方案就是安装 cuda-nvcc 模块。

1
conda install -c nvidia cuda-nvcc
参考文章:
1.Call to CreateProcess failed. Error code: 2 (TensorFlow) You can make sure ptxas is in your conda environment by running conda install -c nvidia cuda-nvcc It worked for me.
2.Call to CreateProcess failed. Error code: 2 报错解决 将环境更改为CUDA10.1+CUDNN7.6.5+anaconda3+tensorflow-gpu2.3.0后不再报错。(CUDA向下是兼容的)
3.tensorflow 2.6 does not detect ptxas.exe
4.Environment Variables 这里通过配置环境变量的形式

4.Could not load library cudnn_cnn_train64_8.dll.

我在执行训练的时候,出现了这个错误。Error code 1455 Please make sure cudnn_cnn_train64_8.dll is in your library path! 经过调查,我发现我的环境变量里面可以找到这个 cudnn_cnn_train64_8.dll,因为我配置了 C:\Soft\anaconda3\pkgs\cudnn-8.2.1-cuda11.3_0\Library\bin 这个路径,不知道为什么还是不行。

这个问题发生在我将 model 作为一个变量进行导出的时候出现了,要是我把模型和训练的代码放到一起,结果就不会出现问题。

1
2
3
# 创建模型
model = Model(input_tensor, output_tensor)
return model
参考文章:
1.解决tensorflow下Could not load library cudnn_ops_infer64_8.dll. Error code 126的问题 基本思路就是从cudnn的bin找到报错信息中缺少的几个dll复制粘贴到CUDA对应的bin目录下

5.Physical devices cannot be modified after being initialized

这个问题出现的是,我的gpus设置,和模型的编译文件是分开的,也就是分成了两个文件。model.compile 在model.py的文件,但是设置gpu的代码放到 training.py 文件中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import tensorflow as tf
from tqdm import tqdm
import keras.backend as K
import matplotlib.pyplot as plt
import input_data
from model import VGG16

# 设置GPU
gpus = tf.config.list_physical_devices("GPU")
if gpus:
tf.config.experimental.set_memory_growth(gpus[0], True) #设置GPU显存用量按需使用
tf.config.set_visible_devices([gpus[0]],"GPU")
# 打印显卡信息,确认GPU可用
print(gpus)

【解决方案】
调整设置gpus的时机,将其放入到导入数据和模型加载之前进行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import tensorflow as tf
from tqdm import tqdm
import keras.backend as K
import matplotlib.pyplot as plt

# 设置GPU
gpus = tf.config.list_physical_devices("GPU")
if gpus:
tf.config.experimental.set_memory_growth(gpus[0], True) #设置GPU显存用量按需使用
tf.config.set_visible_devices([gpus[0]],"GPU")
# 打印显卡信息,确认GPU可用
print(gpus)

import input_data
from model import VGG16
参考文章:
1.train issue RuntimeError: Physical devices cannot be modified after being initialized
2.Tensorflow2.0卷积时报错? 你必须要在import库的代码后面加上那几句话,别的地方加不行,这样就可以解决问题了

6.Memory allocation failure

这个问题出现的原因是我没有使用GPU进行训练,也就是我把设置GPU的代码注释掉了,所以会有这个问题,暂时不知道为什么我的CPU没有分配好这个东西,

7.Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA

在CentOS系统上运行别人写的程序的时候,出现了下面的警告。虽然没毛病,但还是觉得好奇,于是就查了相关资料。

8.OOM

我在 windows 执行模型训练的时候,直接VScode就崩溃了。但是当我把全部代码写到一个 py 文件里面的时候,不会出现这个问题。

【尝试方案】
(1)这个问题很难办,我关机之后,重新运行训练,结果还真是可以进行训练了。
(2)还有就是我在训练的时候,用了远程桌面的形式进行的,或者说我不用远程桌面就可以进行训练了?

后来我排除了是因为远程问题导致的,那么只剩下一个原因了,那就是没有重启机器,这个也是让我非常的疑惑的地方。

9.Dst tensor is not initialized

这个问题就是在我训练完成模型之后,关闭 plt 输出的图像之后出现问题。

根据参考文章来说,可能是某些变量需要被清空,或者就是GPU被占满了。最好的办法就是 “The simple solution for me is by reducing the batch size.”

10.Unable to allocate 392. MiB for an array with shape (25088, 4096) and data type float32

这个问题和上面的问题一样,也是这个样子。

小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。