运行keras时出现Could not create cudnn handle: CUDNN_STATUS_INTERNAL_ERROR的原因和解决方法

Tensorflow和Keras的关系

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

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

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

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

  • 所以说在运行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) 让这些配置生效

+ 为什么使用tensorflow的代码能够解决keras的问题,这就可以用第一部分两者的关系来解释了,keras的底层是tensorflow

  • 22
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
对您提供的问题,我可以给出以下回答: 针对引用中的问题,出现AttributeError: module 'tensorflow.compat.v1' has no attribute 'contrib'的错误,可能是因为您使用的是TensorFlow 2.0及以上版本,而在这些版本中,contrib模块已被移除。解决这个问题的方法是使用TensorFlow 1.x版本,或者修改代码以适应TensorFlow 2.0及以上版本的新特性。 以下是可能适用于TensorFlow 2.0及以上版本的seq_loss.py文件的修改方法: ```python import tensorflow as tf def sequence_loss(logits, targets, weights): with tf.name_scope("sequence_loss"): losses = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=targets) mask = tf.sequence_mask(weights) losses = tf.boolean_mask(losses, mask) return tf.reduce_mean(losses) ``` 针对引用中的问题,出现AttributeError: module 'tensorflow.keras.utils' has no attribute 'multi_gpu_model'的错误,可能是因为您使用的是TensorFlow 2.0及以上版本,而在这些版本中,multi_gpu_model函数已被移除。解决这个问题的方法是使用TensorFlow 1.x版本,或者修改代码以适应TensorFlow 2.0及以上版本的新特性。 以下是可能适用于TensorFlow 2.0及以上版本的修改方法: ```python import tensorflow as tf strategy = tf.distribute.MirroredStrategy() with strategy.scope(): model = create_model() model.compile(...) model.fit(...) ``` 针对您提供的问题,出现AttributeError: module 'tensorflow.keras' has no attribute '__version__'的错误,可能是因为您的TensorFlow版本过低,不支持__version__属性。解决这个问题的方法是升级TensorFlow到最新版本,或者使用其他方法获取TensorFlow的版本信息,例如: ```python import tensorflow as tf print(tf.__version__) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值