无法获得卷积算法。这可能是因为cuDNN无法初始化,
keras
python
tensorflow
16
0

在Tensorflow / Keras中,从https://github.com/pierluigiferrari/ssd_keras运行代码时, 使用估算器:ssd300_evaluation。我收到此错误。

无法获得卷积算法。这可能是因为cuDNN初始化失败,所以请尝试查看上面是否打印了警告日志消息。

这与未解决的问题非常相似: Google Colab错误:无法获得卷积算法。这可能是因为cuDNN初始化失败

我正在运行的问题:

的Python:3.6.4。

Tensorflow版本:1.12.0。

Keras版本:2.2.4。

CUDA:V10.0。

cuDNN:V7.4.1.5。

NVIDIA GeForce GTX 1080。

我也跑了:

import tensorflow as tf
with tf.device('/gpu:0'):
      a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
      b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
      c = tf.matmul(a, b)
with tf.Session() as sess:
print (sess.run(c))

没有错误或问题。

极简示例是:

 from keras import backend as K
 from keras.models import load_model
 from keras.optimizers import Adam
 from scipy.misc import imread
 import numpy as np
 from matplotlib import pyplot as plt

 from models.keras_ssd300 import ssd_300
 from keras_loss_function.keras_ssd_loss import SSDLoss
 from keras_layers.keras_layer_AnchorBoxes import AnchorBoxes
 from keras_layers.keras_layer_DecodeDetections import DecodeDetections
 from keras_layers.keras_layer_DecodeDetectionsFast import DecodeDetectionsFast
 from keras_layers.keras_layer_L2Normalization import L2Normalization
 from data_generator.object_detection_2d_data_generator import DataGenerator
 from eval_utils.average_precision_evaluator import Evaluator
 import tensorflow as tf
 %matplotlib inline
 import keras
 keras.__version__



 # Set a few configuration parameters.
 img_height = 300
 img_width = 300
 n_classes = 20
 model_mode = 'inference'


 K.clear_session() # Clear previous models from memory.

 model = ssd_300(image_size=(img_height, img_width, 3),
            n_classes=n_classes,
            mode=model_mode,
            l2_regularization=0.0005,
            scales=[0.1, 0.2, 0.37, 0.54, 0.71, 0.88, 1.05], # The scales 
 for MS COCO [0.07, 0.15, 0.33, 0.51, 0.69, 0.87, 1.05]
            aspect_ratios_per_layer=[[1.0, 2.0, 0.5],
                                     [1.0, 2.0, 0.5, 3.0, 1.0/3.0],
                                     [1.0, 2.0, 0.5, 3.0, 1.0/3.0],
                                     [1.0, 2.0, 0.5, 3.0, 1.0/3.0],
                                     [1.0, 2.0, 0.5],
                                     [1.0, 2.0, 0.5]],
            two_boxes_for_ar1=True,
            steps=[8, 16, 32, 64, 100, 300],
            offsets=[0.5, 0.5, 0.5, 0.5, 0.5, 0.5],
            clip_boxes=False,
            variances=[0.1, 0.1, 0.2, 0.2],
            normalize_coords=True,
            subtract_mean=[123, 117, 104],
            swap_channels=[2, 1, 0],
            confidence_thresh=0.01,
            iou_threshold=0.45,
            top_k=200,
            nms_max_output_size=400)

 # 2: Load the trained weights into the model.

 # TODO: Set the path of the trained weights.
 weights_path = 'C:/Users/USAgData/TF SSD 
 Keras/weights/VGG_VOC0712Plus_SSD_300x300_iter_240000.h5'

 model.load_weights(weights_path, by_name=True)

 # 3: Compile the model so that Keras won't complain the next time you load it.

 adam = Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)

 ssd_loss = SSDLoss(neg_pos_ratio=3, alpha=1.0)

 model.compile(optimizer=adam, loss=ssd_loss.compute_loss)


dataset = DataGenerator()

# TODO: Set the paths to the dataset here.
dir= "C:/Users/USAgData/TF SSD Keras/VOC/VOCtest_06-Nov-2007/VOCdevkit/VOC2007/"
Pascal_VOC_dataset_images_dir = dir+ 'JPEGImages'
Pascal_VOC_dataset_annotations_dir = dir + 'Annotations/'
Pascal_VOC_dataset_image_set_filename = dir+'ImageSets/Main/test.txt'

# The XML parser needs to now what object class names to look for and in which order to map them to integers.
classes = ['background',
           'aeroplane', 'bicycle', 'bird', 'boat',
           'bottle', 'bus', 'car', 'cat',
           'chair', 'cow', 'diningtable', 'dog',
           'horse', 'motorbike', 'person', 'pottedplant',
           'sheep', 'sofa', 'train', 'tvmonitor']

dataset.parse_xml(images_dirs=[Pascal_VOC_dataset_images_dir],
                  image_set_filenames=[Pascal_VOC_dataset_image_set_filename],
                  annotations_dirs=[Pascal_VOC_dataset_annotations_dir],
                  classes=classes,
                  include_classes='all',
                  exclude_truncated=False,
                  exclude_difficult=False,
                  ret=False)



evaluator = Evaluator(model=model,
                      n_classes=n_classes,
                      data_generator=dataset,
                      model_mode=model_mode)



results = evaluator(img_height=img_height,
                    img_width=img_width,
                    batch_size=8,
                    data_generator_mode='resize',
                    round_confidences=False,
                    matching_iou_threshold=0.5,
                    border_pixels='include',
                    sorting_algorithm='quicksort',
                    average_precision_mode='sample',
                    num_recall_points=11,
                    ignore_neutral_boxes=True,
                    return_precisions=True,
                    return_recalls=True,
                    return_average_precisions=True,
                    verbose=True)
参考资料:
Stack Overflow
收藏
评论
共 6 个回答
高赞 时间 活跃

升级到TF2.0后,我遇到了这个问题。以下开始出现错误:

   outputs = tf.nn.conv2d(images, filters, strides=1, padding="SAME")

我正在使用Ubuntu 16.04.6 LTS(Azure Datascience VM)和TensorFlow 2.0。在此TensorFlow GPU指令页面上按指令升级。这为我解决了这个问题。顺便说一句,它一堆apt-get更新/安装,我执行了所有这些。

收藏
评论

我遇到了此错误,并通过从系统中卸载所有CUDA和cuDNN版本修复了该错误。然后,我为CUDA 9.0安装了CUDA Toolkit 9.0 (没有任何补丁)和cuDNN v7.4.1

收藏
评论

我看到此错误消息的原因有三个,使用了不同的解决方案:

1.您有缓存问题

我经常通过关闭python进程,删除~/.nv目录(在linux上rm -rf ~/.nv )并重新启动Python进程来解决此错误。我不完全知道为什么会这样。它可能至少部分与第二种选择有关:

2.您的内存不足

如果显示卡RAM用完了,该错误也会显示出来。使用nvidia GPU,您可以使用nvidia-smi检查图形卡的内存使用情况。这不仅可以让您读出正在使用的GPU RAM的数量(如果您快要达到极限了,可以使用6025MiB / 6086MiB之类的信息),以及使用GPU RAM的进程的列表。

如果您用完了RAM,则需要重新启动进程(这将释放RAM),然后采取内存占用较少的方法。一些选项是:

  • 减少批量
  • 使用更简单的模型
  • 使用更少的数据
  • 限制TensorFlow GPU内存比例:例如,以下操作将确保TensorFlow使用的RAM小于等于90%:
import keras
import tensorflow as tf

config = tf.ConfigProto()
config.gpu_options.per_process_gpu_memory_fraction = 0.9
keras.backend.tensorflow_backend.set_session(tf.Session(config=config))

如果不与以上各项一起使用,这可能会减慢模型评估的速度,大概是因为必须将大型数据集交换进出,才能容纳已分配的少量内存。

3.您具有不兼容的CUDA,TensorFlow,NVIDIA驱动程序等版本。

如果您从来没有使用过类似的模型,那么您就不会用完VRAM 并且您的缓存是干净的,我将使用最佳的可用安装指南返回并设置CUDA + TensorFlow-我在以下方面获得了最大的成功请参阅https://www.tensorflow.org/install/gpu上的说明,而不是NVIDIA / CUDA网站上的说明。 Lambda Stack也是一个不错的选择。

收藏
评论

问题在于新版本的tensorflow 1.10.x以及cudnn 7.0.5和cuda 9.0的版本不兼容。最简单的解决方法是将tensorflow降级为1.8.0

点安装--upgrade tensorflow-gpu == 1.8.0

收藏
评论

Keras包含在以上TensorFlow 2.0中。所以

  • 删除import keras
  • 取代from keras.module.module import class语句- > from tensorflow.keras.module.module import class
  • 也许您的GPU内存已满。因此在GPU选项中使用allow growth = True。现在不推荐使用。但是在导入后使用以下代码片段可以解决您的问题。

    import tensorflow as tf

    from tensorflow.compat.v1.keras.backend import set_session

    config = tf.compat.v1.ConfigProto()

    config.gpu_options.allow_growth = True # dynamically grow the memory used on the GPU

    config.log_device_placement = True # to log device placement (on which device the operation ran)

    sess = tf.compat.v1.Session(config=config)

    set_session(sess)

收藏
评论

我收到了相同的错误,出现此错误的原因是由于cudaa / cudnn版本与您的tensorflow版本不匹配,有两种方法可以解决此问题:

  1. 您可以降级Tensorflow版本pip install --upgrade tensorflowgpu==1.8.0

  2. 或者,您可以按照此处的步骤进行操作。

    提示:选择您的ubuntu版本,然后按照以下步骤操作。:-)

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题