这篇教程在使用keras时报错显示could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR的解决办法写得很实用,希望能帮到您。
Tensorflow和Keras的关系
在正式进入这个问题之前,我们先来了解一下tensorflow和keras之间的关系,因为后面会用到这个地方的知识。
-
首先,tensorflow和keras都是深度学习框架,当你遇到上面这个问题的时候表明你至少用过两者之一。
-
其次,tensorflow相较于keras更偏向于底层,而keras封装性更好,类似于接口。
-
keras是在tensorflow的基础上建立起来的,可以把keras看做tensorflow或者theano(已经停更的深度学习框架)的接口 两者的直观关系如图:
-
所以说在运行keras的时候,实际上在底层还是运行tensorflow,但是keras封装性好,学习起来比较简单。
进入正题
- 原因:出现Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR的原因是你运行代码的电脑的显存不够导致的
- 一般情况下,如果不加以限制,很多深度学习框架的代码在运行的时候会申请整个显存空间(即便它不需要这么多的资源,但是它申请了之后就不允许其他的程序使用),所以在这种状态下运行代码,就会出现显存不够用的问题(因为还有其他的程序或操作需要显存资源)
- 解决方法:通过编写代码,控制显存的使用就可以避免这个问题
import tensorflow as tf
config = tf.compat.v1.ConfigProto(gpu_options=tf.compat.v1.GPUOptions(allow_growth=True))
sess = tf.compat.v1.Session(config=config)
+ 为什么使用tensorflow的代码能够解决keras的问题,这就可以用第一部分两者的关系来解释了,keras的底层是tensorflow python2 与 python3 语法区别-使用 2to3 将代码移植到 Python 3 no module named pip解决方法-镜像安装 |