【转】Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERRO

Tensorflow和Keras的关系
在正式进入这个问题之前,我们先来了解一下tensorflow和keras之间的关系,因为后面会用到这个地方的知识。

首先,tensorflow和keras都是深度学习框架,当你遇到上面这个问题的时候表明你至少用过两者之一。

其次,tensorflow相较于keras更偏向于底层,而keras封装性更好,类似于接口。

keras是在tensorflow的基础上建立起来的,可以把keras看做tensorflow或者theano(已经停更的深度学习框架)的接口
两者的直观关系如图:

【转】Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERRO_第1张图片

所以说在运行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)
# tf.compat.v1.ConfigProto() 这是tensorflow2.0+版本的写法,这个方法的作用就是设置运行tensorflow代码的时候的一些配置,例如如何分配显存,是否打印日志等;所以它的参数都是 配置名称=True/False(默认为False) 这种形式
# gpu_options=tf.compat.v1.GPUOptions(allow_growth=True) 限制GPU资源的使用,此处allow_growth=True是动态分配显存,需要多少,申请多少,不是一成不变、而是一直变化
# sess = tf.compat.v1.Session(config=config) 让这些配置生效

原文链接:https://blog.csdn.net/qq_44761397/article/details/107816110

你可能感兴趣的:(深度学习框架,tensorflow,深度学习)