UnknownError:使用 Tensorflow-gpu 运行 LSTM 时无法获取卷积算法

Posted

技术标签:

【中文标题】UnknownError:使用 Tensorflow-gpu 运行 LSTM 时无法获取卷积算法【英文标题】:UnknownError: Failed to get convolution algorithm when running LSTM using Tensorflow-gpu 【发布时间】:2020-04-14 19:02:31 【问题描述】:

我正在尝试使用 tensorflow-gpu 运行 RNN,因为使用 CPU 大约需要 13 分钟来处理 1 个 epoch(训练中的 8000 张图片/测试中的 2000 张图片)。但是,我多次尝试在 Windows 10 上安装 tensorflow-gpu,但无法成功运行它。我有以下配置:

GPU 1:NVIDIA GeForce GTX 1650 GPU 0:英特尔(R) UHG 显卡 630 CPU:Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz

我在 pip 中的 virtualenv Tensorflow 中安装了以下内容:pip packages

我遵循了以下教程:

https://www.tensorflow.org/install/gpu https://towardsdatascience.com/installing-tensorflow-with-cuda-cudnn-and-gpu-support-on-windows-10-60693e46e781 https://www.pugetsystems.com/labs/hpc/The-Best-Way-to-Install-TensorFlow-with-GPU-Support-on-Windows-10-Without-Installing-CUDA-1187/

此外,由于这是一个热门问题,我尝试了其他主题中建议的不同解决方案,例如:

tensorflow-gpu / CUDA / Cudnn 之间的兼容性(我尝试了不同的组合 CUDA 9.0/ ..) 我将我的 tensoflow-gpu 降级到 1.8.0 但没有工作

目前,我有 tensorflow-gpu 2.00、CUDA 10.0、Cudnn 7.4.1.5,这似乎与定义的内容兼容 (https://www.tensorflow.org/install/source_windows) 已安装 Visual Studio,并为我的 Intel 卡安装了最新的驱动程序。

但我也发现我的 GeForce GTX 1650 在启用 CUDA 的 NVIDIA gpu 中没有提到 (https://developer.nvidia.com/cuda-gpus) 不知道这是否是问题?

我得到的错误信息是:UnknownError: Failed to get convolution algorithm。这可能是因为 cuDNN 初始化失败,因此请尝试查看上面是否打印了警告日志消息。 [操作:Conv2D]

from tensorflow.keras import backend
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D
from tensorflow.keras.layers import MaxPooling2D
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense

classifier = Sequential()

classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))

classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))

classifier.add(Flatten())

classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 1, activation = 'sigmoid'))

classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

from tensorflow.keras.preprocessing.image import ImageDataGenerator

train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = train_datagen.flow_from_directory('dataset/training_set',
                                                 target_size = (64, 64),
                                                 batch_size = 32,
                                                 class_mode = 'binary')

test_set = test_datagen.flow_from_directory('dataset/test_set',
                                            target_size = (64, 64),
                                            batch_size = 32,
                                            class_mode = 'binary')

classifier.fit_generator(training_set,
                         steps_per_epoch = 8000,
                         epochs = 25,
                         validation_data = test_set,
                         validation_steps = 2000)

【问题讨论】:

【参考方案1】:

您的图像都是 RGB 的吗?由于模型和数据之间的尺寸错误,我得到了这个错误。

如果您的图像是灰度图像,它们将有 1 个通道:(64,64,1),并且与您模型的输入形状 (64,64,3) 不兼容。 如果您的图像是 RGBA,它们将有 4 个通道,也是不兼容的。

花点时间检查生成器的结果:

print('training data shapes:')
for i in range(len(training_set)):
    print(training_set[i][0].shape)

print('\ntest data shapes:')
for i in range(len(test_set)):
    print(test_set[i][0].shape)

还需要一些时间来绘制来自生成器的一些图像及其类。

【讨论】:

图像基于 RGB。我没想到问题来自代码,因为它来自课程教程本身(Udemy 的深度学习 A-Z)。我得到以下结果: (32, 64, 64, 3) 因为我有 10000 个图像,所以没有让它运行所有图像。 也许你可以让它为所有图像运行,以防万一......在循环中检查assert img.shape[-1] == 3。你的代码似乎完全没问题。也许你的问题和我的不一样,确实。 所以我的训练数据形状:(32, 64, 64, 3) 和测试数据形状:(32, 64, 64, 3) 和明显的 1 个形状为 (16, 64, 64, 3)。在哪里添加 assert img.shape[-1] == 3?放入循环时未找到错误“img”。 img = training_set[i][0]。不过从你的描述看来一切正常。

以上是关于UnknownError:使用 Tensorflow-gpu 运行 LSTM 时无法获取卷积算法的主要内容,如果未能解决你的问题,请参考以下文章

UnknownError:使用 Tensorflow-gpu 运行 LSTM 时无法获取卷积算法

Windows下Pycharm安装Tensorflow:ERROR: Could not find a version that satisfies the requirement tensorflo

Neo.DatabaseError.General.UnknownError - Java 堆空间 - Neo4j - Cypher

CuDNNLSTM:UnknownError:找不到 dnn 实现

tensorflow.python.framework.errors_impl.UnknownError:重命名失败:输入/输出错误

FacebookAuthorizationException:UnknownError:remote_app_id 与 FB SDK 3.5 上存储的 id 不匹配