解决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
解决Failed to get convolution algorithm. This is probably because cuDNN failed to initialize_第1张图片

那么我就想是不是有其他什么办法解决这个问题的
在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了。

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

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