无法使用4 VGG16微调Keras型号

时间:2018-02-21 04:21:56

标签: tensorflow keras keras-layer

我使用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图层时,才会出现这些错误。

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

事实证明,它与模型中的VGG16数无关。问题是由批量大小引起的。

当我说使用1个VGG16的模型工作时,该模型使用的批量大小为8.当我将批量大小减小到小于4(1,2或3)时,则发生了同样的错误。

现在我只使用批量大小4用于4 VGG16的型号,它工作正常,但我仍然不知道为什么它在批量大小< 4(可能它与我使用4个GPU的事实有关)。