Я создал собственную модель FCNN, создав подкласс keras.Model
. Эта модель использует пользовательские tf-операции и слои keras, которые я сделал, но не имеет никаких выпадающих слоев, что могло бы вызвать другое поведение во время обучения и проверки соответственно.
Для процесса обучения у меня есть генератор данных, который постоянно передает данные. сеть с новыми входами, которые никогда ранее не использовались в качестве входов. Для проверки я использовал точно такой же генератор, чтобы сгенерировать 1000 входов и затем сохранить их в памяти.
Я тренирую две модели параллельно на одних и тех же входах, одна моя, а другая Deeplabv3 +, которая реализуется определяя модель как функцию, а не мою подклассу проверки и никогда не видит одни и те же данные дважды, как проверки. И вот проблема: для функциональной модели Deeplabv3 + это так, а для моей это совсем не так. Deeplabv3 + имеет потерю обучения 0,14 и потерю проверки 0,15, в то время как моя модель имеет потерю обучения 0,06 и потерю проверки 0,5.
Учитывая процедуру обучения, я не могу объяснить, как такая плохая ошибка проверки возможно, поэтому я подозреваю, что tf или keras как-то нарушают состояние модели во время проверки, поэтому мои вопросы:
Существуют ли другие слои или функции в tf.keras, кроме Dropout которые ведут себя иначе во время валидации, чем во время обучения?
Что керасы делают с модельным состоянием после этапа обучения эпохи, которое может вызвать такое поведение?
Есть ли что-то, что я должен учитывать в этом отношении при создании подкласса keras.Model
? В прошлом у меня были проблемы, такие как невозможность правильно сохранять и загружать веса при вложении моделей или не давать правильные имена слоям. Может ли это быть что-то связанное с этим?