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

时间:2019-12-23 13:28:31

标签: python tensorflow keras deep-learning gpu

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

GPU 1:NVIDIA GeForce GTX 1650 GPU 0:Intel®UHG Graphics 630 CPU:Intel(R)CoreTM i7-9750H CPU @ 2.60GHz

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

我遵循了以下教程:

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

  • 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,并且最新的驱动程序可以使用我的英特尔卡。

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

我得到的错误消息是:UnknownError:无法获得卷积算法。这可能是因为cuDNN初始化失败,所以请尝试查看上面是否打印了警告日志消息。 [Op: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 个答案:

答案 0 :(得分:0)

您的图像都是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)

还花一些时间绘制生成器中带有其类的一些图像。