Модель функции CNN, написанная на Keras 2.2.4, не обучается в TensorFlow или Keras 2.4

#tensorflow #keras #deep-learning #conv-neural-network #object-detection

Вопрос:

Я имею дело с проблемой обнаружения объектов и использую модель, которая фактически функционирует (ее результаты были опубликованы в статье, и у меня есть исходный код). Первоначально код был написан с Keras 2.2.4 без импорта TensorFlow и обучен и протестирован на том же наборе данных, который я использую в данный момент. Однако, когда я пытаюсь запустить ту же модель с TensorFlow 2.x, она просто ничему не научится.

Я пытался импортировать все из TensorFlow 2.4, но у меня та же проблема, если я импортирую все (слои, модели, оптимизаторы…) из Keras 2.4. И я пытался сделать это на двух разных устройствах, оба с использованием графического процессора. А именно, происходит то, что функция потерь уменьшается до смешного быстро, но точность ни на йоту не увеличивается (или, если это произойдет, она застревает примерно на 10% или около того). Кроме того, время от времени это происходит от эпохи к эпохе: потери претерпевают ОГРОМНЫЕ скачки между последовательными эпохами, и все это без каких-либо изменений в точности

Я попытался обучить сеть на другом наборе данных (пришлось изменить последние слои, чтобы соответствовать требуемым размерам), и модель, казалось, обучалась обычным способом, т. Е. Точность фактически увеличивается, а потери не достигают 0,0 x за одну эпоху.

Я не могу опубликовать сценарий, но модель представляет собой сеть Кодировщик-декодер: последовательные свертки с увеличением числа фильтров уменьшают размеры изображения, а зеркальный путь транспонированных сверток восстанавливает исходные размеры. Таким образом, в основном сеть содержит только:

  1. Conv2D
  2. conv2dтранспозировать
  3. Нормализация пакетов
  4. Активация(«relu»)
  5. Активация(«сигмовидная»)
  6. соединять

6 используется для объединения выходов из параллельных путей или удаленных слоев; 3 и 4 используются после каждого соединения или переноса; 5 используется только в качестве конечной функции активации, т. е. в качестве выходного слоя.

Я думаю, что проблема довольно общая, и я честно удивлен, что не смог найти ни одного вопроса по этому поводу. Что здесь может происходить? Проблема, должно быть, как-то связана с версиями TF/Keras, но я не могу найти никакой документации по этому поводу, и я пытался изменить так много вещей, но ничего не изменилось. Это безумие, потому что, если бы я не знал, что модель работает, я бы попытался переписать ее с нуля, поэтому я боюсь, что эта проблема может возникнуть с новой сетью, и я не смогу понять, в чем дело-в библиотеках или в самой модели.

Заранее благодарю вас! 🙂

Редактировать

Фрагменты кода:

  • Сверточный блок:
  encoder1 = Conv2D(filters=first_layer_channels, kernel_size=2, strides=2)(input) encoder1 = BatchNormalization()(encoder1) encoder1 = Activation('relu')(encoder1)  
  • Декодер
 decoder1 = Conv2DTranspose(filters=first_layer_channels, kernel_size=2, strides=2)(encoder4) decoder1 = BatchNormalization()(decoder1) decoder1 = Activation('relu')(decoder1)  
  • Заключительные слои:
 final = Conv2D(filters=total, kernel_size=1)(decoder4) final = BatchNormalization()(final) Last_Conv = Activation('sigmoid')(final)  

Задача заключается в оценке позы человека: сеть (которая, я помню, работает над этой конкретной задачей с Keras 2.2.4) должна предсказать двадцать двоичных карт, содержащих положения определенных ключевых точек.

Комментарии:

1. В этом вопросе недостаточно подробностей, пожалуйста, не пытайтесь описывать код или поведение, вместо этого включите код и графики. Вы даже не упомянули, какой задаче обучаетесь.

2. @Dr. Snoopy Я отредактировал вопрос. Я не предоставил никаких подробностей, потому что сеть работает в Keras 2.2.4 (она все еще работает, если я понижу версию), потому что это допустимая модель, специально созданная для этой задачи. Я хочу знать, не было ли у кого-нибудь такой же проблемы, как у меня, при переходе с Keras 2.2.4 на Keras или Tensorflow 2.4.