не может точно настроить модель Keras с 4 VGG16

Я строю модель с 4 VGG16 (не включая верхнюю), а затем объединяю 4 выхода из 4 VGG16, чтобы сформировать плотный слой, за которым следует слой softmax, поэтому моя модель имеет 4 входа (4 изображения) и 1 выход. (4 класса).

Сначала я выполняю переносное обучение, просто тренируя плотные слои и замораживая слои из VGG16, и это отлично работает.

Однако после разморозки слоев VGG16, установив layer.trainable = True, я получаю следующие ошибки:

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

Затем я следую решению в эту страницу и установите 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.

Я также построил модель только с одним VGG16, и эта модель также отлично работает.

Итак, в общем, только когда я размораживаю слои VGG16 в модели с 4 VGG16, я получаю эти ошибки.

Любые идеи, как это исправить?


person chaohuang    schedule 21.02.2018    source источник


Ответы (1)


Оказывается, это не имеет ничего общего с номером VGG16 в модели. Проблема связана с размером партии.

Когда я сказал, что модель с 1 VGG16 работала, в этой модели использовался размер партии 8. И когда я уменьшил размер партии до 4 (1, 2 или 3), произошли те же ошибки.

Теперь я просто использую размер пакета 4 для модели с 4 VGG16, и он работает нормально, хотя я до сих пор не знаю, почему он не работает, когда размер пакета> 4 (вероятно, это связано с тем, что я использую 4 графических процессора).

person chaohuang    schedule 21.02.2018