Tensorflow CNN编译错误:无法获取卷积算法。这可能是因为cuDNN未能初始化,

Tensorflow CNN编译错误:无法获取卷积算法。这可能是因为cuDNN未能初始化,,tensorflow,keras,tensorflow2.0,Tensorflow,Keras,Tensorflow2.0,我只是试着自己建立VGG-19模型,但每次尝试编译时,错误都会增加,尽管它在Alexnet上运行得很清楚。请告诉我这个问题 背景 CPU:AMD RYZEN 2700x GPU:RTX2080 操作系统:窗口10 CUDA:10.0 Tensorflow版本:Tensorflow-2.0.0beta1 工作工具:Jupyter实验室 时间:凌晨三时 气候:多雨 感到沮丧: 密码 导入tensorflow作为tf 从tensorflow进口keras 从tensorflow.keras导入图层 将

我只是试着自己建立VGG-19模型,但每次尝试编译时,错误都会增加,尽管它在Alexnet上运行得很清楚。请告诉我这个问题

背景 CPU:AMD RYZEN 2700x GPU:RTX2080 操作系统:窗口10 CUDA:10.0 Tensorflow版本:Tensorflow-2.0.0beta1 工作工具:Jupyter实验室 时间:凌晨三时 气候:多雨 感到沮丧:

密码 导入tensorflow作为tf 从tensorflow进口keras 从tensorflow.keras导入图层 将tensorflow_数据集作为TFD导入 将matplotlib.pyplot作为plt导入 从functools导入部分 将skimage.io导入为io 将numpy作为np导入 纪元=5 批次=32 学习率=0.0001 leaky_relu=partialkeras.activations.relu,α=0.1 def至_浮动图像,标签: float_image=image/255 返回浮点数图像、标签 数据,info=tfds。加载'cifar10',作为\u supervised=True,其中\u info=True 列车,测试=数据。获取“列车”,数据。获取“测试” 序列号数据=train.mapto\u float.shuffle10000.batchBATCH.prefetch3 test_data=test.mapto_float.batchBATCH.prefetch4 样本批次=下一个训练数据[0] printio.imshow\u collectionio.concatenate\u imagesn p.arraysample\u批处理 VGG19tf.keras.Model类: 定义初始自我: superVGG19,自我初始化 self.conv1_1=layers.Conv2Dfilters=64, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.conv1_2=layers.Conv2Dfilters=64, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.pool1=layers.MaxPool2Dpool_size=2,2, 步幅=2,2, “一样” self.conv2_1=layers.Conv2Dfilters=128, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.conv2_2=layers.Conv2Dfilters=128, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.pool2=layers.MaxPool2Dpool_size=2,2, 步幅=2,2, “一样” self.conv3_1=layers.Conv2Dfilters=256, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.conv3_2=layers.Conv2Dfilters=256, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.conv3_3=layers.Conv2Dfilters=256, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.conv3_4=层。Conv2Dfilters=256, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.pool3=layers.MaxPool2Dpool_size=2,2, 步幅=2,2, “一样” self.conv4_1=layers.Conv2Dfilters=512, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.conv4_2=layers.Conv2Dfilters=512, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.conv4_3=layers.Conv2Dfilters=512, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.conv4_4=layers.Conv2Dfilters=512, 克恩 el_尺寸=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.pool4=layers.MaxPool2Dpool_size=2,2, 步幅=2,2, “一样” self.conv5_1=layers.Conv2Dfilters=512, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.conv5_2=layers.Conv2Dfilters=512, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.conv5_3=layers.Conv2Dfilters=512, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.conv5_4=layers.Conv2Dfilters=512, 内核大小=3,3, 步幅=1,1, “相同”, 激活=泄漏 self.pool5=layers.MaxPool2Dpool_size=2,2, 步幅=2,2, “一样” self.flat6=层。展平 self.fc6=layers.Denseunits=4096, 激活=泄漏 self.drop6=层。Dropoutrate=0.5 self.fc7=layers.Denseunits=4096, 激活=泄漏 self.drop7=层。Dropoutrate=0.5 self.fc8=层。Denseunits=10, 激活=tf.keras.activations.softmax def callself,输入: x=自转换输入 x=self.conv1_2x x=self.1X x=self.conv2_1x x=self.conv2_2x x=self.2x x=self.conv3\u 1x x=self.conv3_2x x=self.conv3_3x x=self.conv3\u 4x x=self.3x x=self.conv4_1x x=self.conv4_2x x=自我调节4×3x x=self.conv4\u 4x x=self.4x x=self.conv5_1x x=self.conv5_2x x=self.conv5_3x x=self.conv5_4x x=self.5x x=自平6x x=自我。fc6x x=自降6x x=self.fc7x x=自投7x 输出=self.fc8x 返回输出 VGG19_型号=VGG19 my_loss=tf.keras.loss.SparseCategoricalCrossentropyfrom_logits=True VGG19_model.compileoptimizer=tf.keras.optimizers.AdamLearning_rate, 损失=我的损失, 指标=[“准确度”], VGG19_model.fittrain_数据,EPOCH=EPOCH,verbose=2 错误消息 -------------------------------------- UnknownError回溯上次最近的呼叫 在里面 4. 5. -->6 VGG19_model.fittrain_数据,EPOCH=EPOCH,verbose=2 ~\Anaconda3\envs\cuda\lib\site packages\tensorflow\python\keras\engine\training.py在fitself、x、y、批大小、历元、详细、回调、验证拆分、验证数据、无序、类权重、样本权重、初始历元、每历元的步数、验证步骤、验证频率、最大队列大小、工作人员、使用多处理、**kwargs 641最大队列大小=最大队列大小, 642名工人=工人, ->643使用多处理=使用多处理 644 645 def evaluateself, ~\Anaconda3\envs\cuda\lib\site packages\tensorflow\python\keras\engine\training\u generator.py在fitself、model、x、y、批大小、epoch、verbose、callbacks、validation\u split、validation\u data、shuffle、class\u weight、sample\u weight、initial\u epoch、steps\u per\u epoch、validation\u freq、**kwargs中 692洗牌=洗牌, 693初始纪元=初始纪元, ->694步\u name='steps\u per\u epoch' 695 696 def evaluateself, ~\Anaconda3\envs\cuda\lib\site packages\tensorflow\python\keras\engine\training\u generator.py in model\u iterationmodel,data,steps\u per\u epoch,epoch,verbose,callbacks,validation\u data,validation\u steps,validation\u freq,class\u weight,max\u queue\u size,worker,use\u多重处理,shuffle,初始\u epoch,mode,batch\u size,steps\u name,**kwargs 262 263延迟=非模型。\已编译 ->264批处理输出=批处理功能*批处理数据 265如果未安装批处理,请列出: 266批次输出=[批次输出] ~\Anaconda3\envs\cuda\lib\site packages\tensorflow\python\keras\engine\training.py在train\u on\u batchself中, x、 y、样本权重、类别权重、重置度量 916自我更新样本权重模式样本权重=样本权重 917自动生成训练功能 ->918输出=self.train\u functionins pylint:disable=不可调用 919 920如果重置_度量: ~\Anaconda3\envs\cuda\lib\site packages\tensorflow\python\keras\backend.py in\uuuu call\uu self,输入 3508值=数学运算castvalue,tensor.dtype 3509转换的_输入值 ->3510输出=自。\图形\ fn*转换的\输入 3511 3512.numpy通常会制作一份副本以确保内存安全。 ~\Anaconda3\envs\cuda\lib\site packages\tensorflow\python\eager\function.py在调用self、*args、**kwargs中 570 raise TypeErrorKeyword参数{}未知。应为{}..格式 571 listkwargs.keys,listself.\u arg\u关键字 ->572返回自我。\u调用\u flatargs 573 574 def_filtered_callself、args、kwargs: ~\Anaconda3\envs\cuda\lib\site packages\tensorflow\python\eager\function.py in\u call\u flatself,args 669只需要在图形模式和有输出时覆盖渐变。 670如果context.executing_急切地执行或不自动输出: ->671 outputs=self.\u expression\u function.callctx,args 672其他: 673自动寄存器梯度 callself、ctx、args中的~\Anaconda3\envs\cuda\lib\site packages\tensorflow\python\eager\function.py 443 attrs=执行器类型,执行器类型, 444配置文件,配置文件, ->445立方英尺=立方英尺 446将空列表替换为无 447输出=输出或无 ~\Anaconda3\envs\cuda\lib\site packages\tensorflow\python\eager\execute.py中的quick\u executeop\u名称、num\u输出、输入、属性、ctx、名称 65.其他: 66 message=e.message -->67六。从核心提升。状态提升到例外。代码,消息,无 68除e以外的类型错误: 69如果有任何操作,输入中x的x为符号张量: ~\Anaconda3\envs\cuda\lib\site packages\six.py中的raise\u fromvalue,from\u value 未知错误:找到2个根错误。 0未知:获取卷积算法失败。这可能是因为cuDNN未能初始化,所以请尝试查看上面是否打印了警告日志消息。 [[节点vg_g19_2/conv2d_32/conv2d定义于:6]] [[Func/Adam/gradients\u 2/vg\u g19\u 2/dropout\u 5/cond\u grad/If/then/\u 22/input/\u 75/\u 64]]

1未知:获取卷积算法失败。这可能是因为cuDNN未能初始化,所以请尝试查看上面是否打印了警告日志消息。 [[节点vg_g19_2/conv2d_32/conv2d定义于:6]] 0成功的操作。 忽略0个派生错误。[Op:uuu推理keras scratch graph_10115]

函数调用堆栈:
keras_scratch_graph->keras_scratch_graph

首先要检查是否正确安装了兼容的CUDA、cuDNN驱动程序。然后,您可以通过允许gpu内存增长来尝试gpu内存资源管理

allow_growth option,尝试根据运行时分配只分配尽可能多的GPU内存:它开始分配很少的内存,随着会话运行和需要更多GPU内存,它扩展了TensorFlow进程所需的GPU内存区域

要了解更多信息,请参阅 您可以尝试通过以下方式允许GPU内存增长:

config=tf.ConfigProto config.gpu\u options.allow\u growth=True sess=tf.Sessionconfig=config
你安装了cuDNN吗?您的Nvidia驱动程序版本是否>410.x?确保您满足所有要求。因为我使用tensorflow2.0.0-beta1,所以您给出的答案无效。然而,我在tensorflow2.0教程gpus=tf.config.experimental.list_physical_devices'GPU'中发现了类似的东西,它最终成功了!!感谢您的帮助: