解决Failed to get convolution algorithm. This is probably because cuDNN failed to initialize

问题如下:

UnknownError (see above for traceback): Failed to get convolution algorithm. This is probably because cuDNN failed to initialize, so try looking to see if a warning log message was printed above.
         [[node conv2d_1/convolution (defined at C:\Users\admin\anaconda3\lib\site-packages\keras\backend\tensorflow_backend.py:3717) ]]
         [[node boolean_mask_5/GatherV2 (defined at D:\codeHub\Object-Detection-and-Tracking\OneStage\yolo\deep_sort_yolov3\yolo3\model.py:184) ]]

电脑环境
cuda 10.1
cuDNN 7
Tensorflow 1.13.1

其实刚一开始看到这个问题我就知道一定是cuda的版本的问题了,搜了一下发现大家都说是TensorFlow版本的问题
说让安装TensorFlow1.8.
我对这个的方法是排斥的,
原因两点
1.不能遇到问题就想着降版本,这样的话官方发布新版本就没意义了。
2.另外一个就是TensorFlow官网上写的很清楚,不同版本的TensorFlow对应什么版本的cuDNN和CUDA,CUDA 10的情况下你降级到TensorFlow1.8,即使是现在这个问题可以解决,以后依然会出现其他问题的(因为TensorFlow1.8对于的是CUDA 9)大概率你又要重新安装CUDA
在这里插入图片描述

那么我就想是不是有其他什么办法解决这个问题的
在medium上看到了这个回答
回答链接
上面说是GPU内存的问题,那大概了就是这个了

解决办法

import tensorflow as tf
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()  
config.gpu_options.allow_growth = True 
sess = tf.Session(config=config)
set_session(sess)

实际上就是把GPU按需分配

但是发现又出现了一个问题

raise RuntimeError('The Session graph is empty.  Add operations to the '
RuntimeError: The Session graph is empty.  Add operations to the graph before calling run().

内存还是不够,我的垃圾GTX1650 只有4G显存…

解决方法:

import tensorflow as tf
import keras  
from keras.backend.tensorflow_backend import set_session
config = tf.ConfigProto()  
config.gpu_options.allow_growth = True 
sess = tf.Session(config=config)
set_session(sess)
keras.backend.clear_session() #清理session

原因
开头开启的用来限制显存的session由于没有清理,用keras里的clear_session()清理一下session就OK了。

总之一点,不要一遇到问题就想着降版本了,这个方法太傻了

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值