我用4个VGG16 (不包括顶部)构建一个模型,然后将4个VGG16的4个输出连接起来形成一个密集层,紧接着是softmax层,所以我的模型有4个输入(4个图像)和1个输出(4个类)。
我首先通过训练密集层并冻结VGG16中的层来进行迁移学习,这很好用。
但是,在通过设置layer.trainable = True解冻VGG16层之后,我得到了以下错误:
tensorflow/core/platform/cpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA 2018 23:12:28.501894: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1030] Found device 0 with properties: name: GeForce GTX TITAN X major: 5 minor: 2 memoryClockRate(GHz): 1.076 pciBusID: 0000:0a:00.0 totalMemory: 11.93GiB freeMemory: 11.71GiB 2018 23:12:28.744990: I tensorflow/stream_executor/cuda/cuda_dnn.cc:444] could not convert BatchDescriptor {count: 0 feature_map_count: 512 spatial: 14 14 value_min: 0.000000 value_max: 0.000000 layout: BatchDepthYX} to cudnn tensor descriptor: CUDNN_STATUS_BAD_PARAM
然后,我遵循this page中的解决方案并设置os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'。上面的第一个错误已经消失了,但我仍然得到第二个错误:
keras tensorflow/stream_executor/cuda/cuda_dnn.cc:444 could not convert BatchDescriptor to cudnn tensor descriptor: CUDNN_STATUS_BAD_PARAM
如果我再次冻结VGG16层,那么代码就可以正常工作。在其他作品中,这些错误只有在我将VGG16层设置为可训练时才会发生。
我还构建了一个只有1个VGG16的模型,而且这个模型也工作得很好。
因此,总而言之,只有当我解冻具有4个VGG16的模型中的VGG16层时,我才会得到这些错误。
有什么办法解决这个问题吗?
发布于 2018-02-21 23:48:25
事实证明,它与模型中的VGG16数量无关。这个问题是由于批量大小造成的。
当我说具有1个VGG16的模型有效时,该模型使用批处理大小8。当我将批处理大小减小到小于4(1、2或3)时,同样的错误也会发生。
现在我只对4个VGG16的模型使用批处理大小4,它工作得很好,尽管我仍然不知道当批处理大小<4时它失败的原因(可能与我使用4个GPU的事实有关)。
https://stackoverflow.com/questions/48898124
复制相似问题