如何在导入Keras时隐藏警告及错误信息?
如何在导入Keras时隐藏警告及错误信息?
我太懂这种被无关日志刷屏的烦恼了!你提到你的脚本导入这些Keras模块:
from keras.models import Sequential from keras.layers import Dense, Input from keras.utils import to_categorical
每次运行都会弹出一堆CUDA相关的警告和错误信息,比如:
2024-07-20 10:51:48.653282: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used. 2024-07-20 10:51:48.657088: I external/local_xla/xla/tsl/cuda/cudart_stub.cc:32] Could not find cuda drivers on your machine, GPU will not be used. 2024-07-20 10:51:48.670352: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered 2024-07-20 10:51:48.710318: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered 2024-07-20 ...
其实这些信息大多是TensorFlow底层的日志提示(现在Keras已经是TensorFlow的官方API了),不是你的代码真的出了问题——只是告诉你没安装CUDA驱动所以用不了GPU,还有一些插件注册的小冲突,完全不影响代码运行。下面给你几个实用的屏蔽方法:
方法一:通过TensorFlow日志级别控制
在导入Keras之前,先调整TensorFlow的日志输出级别,把无关的INFO、WARNING都屏蔽掉:
import tensorflow as tf # 只保留ERROR级别的信息,其他都过滤掉 tf.get_logger().setLevel('ERROR') # 之后再导入你的Keras模块 from keras.models import Sequential from keras.layers import Dense, Input from keras.utils import to_categorical
如果还是有漏网的信息,可以试试通过环境变量加强控制:
import os # 设置TF日志级别:3表示只显示ERROR,0=全显示,1=屏蔽INFO,2=屏蔽INFO和WARNING os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' import tensorflow as tf from keras.models import Sequential from keras.layers import Dense, Input from keras.utils import to_categorical
方法二:用Python warnings模块过滤警告
有些警告是Python标准库发出的,直接用warnings模块忽略就行:
import warnings # 忽略所有警告(也可以指定特定类型,比如DeprecationWarning) warnings.filterwarnings('ignore') # 导入Keras模块 from keras.models import Sequential from keras.layers import Dense, Input from keras.utils import to_categorical
方法三:组合使用效果最佳
把环境变量设置、日志级别调整和警告过滤结合起来,基本能把所有无关信息都屏蔽掉:
import os import warnings import tensorflow as tf os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3' warnings.filterwarnings('ignore') tf.get_logger().setLevel('ERROR') # 最后导入Keras模块 from keras.models import Sequential from keras.layers import Dense, Input from keras.utils import to_categorical
提醒一下:这些设置只是隐藏了日志信息,不会影响模型的训练和运行。如果之后你需要调试GPU相关的问题,记得把这些设置改回来,方便排查问题哦!
备注:内容来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

