Я наблюдаю странное поведение Кераса.Я тренирую маленькую модель, в которой тренировочный убыток становится равным nan only в конце первой эпохи.
Так что, если у меня есть 100 партий, и я прекращаю обучение в партии 99, тогда возобновляюдля других 99 он тренируется нормально.Иначе, когда он достигает конца эпохи, он всегда возвращает nan.
Я использую пользовательскую функцию потерь:
def corr(x, y):
xc = x - K.mean(x)
yc = y - K.mean(y)
r_num = K.mean(xc*yc)
r_den = K.std(x)*K.std(y)
return r_num/r_den
И я попробовал все стандартные приемы, такие как снижение скорости обучения, ограничение нормы и значения градиента и увеличение партииразмер.Только в случае увеличения размера моей партии до чего-то нереального, например, 100 000 (у меня есть 1 миллион точек данных), она действительно продолжается после эпохи, но я хотел бы понять, что происходит в конце, что вызывает это странное поведение.Я также пробовал разные оптимизаторы (в настоящее время использую Adam) и пробовал это на разных системах, чтобы убедиться, что это не проблема на моем одном компьютере.
Мой вход и выход одномерный, а моя модель представлена ниже.
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_7 (InputLayer) (None, 1) 0
_________________________________________________________________
dense_7 (Dense) (None, 100) 200
_________________________________________________________________
dense_8 (Dense) (None, 100) 10100
_________________________________________________________________
dense_9 (Dense) (None, 1) 101
=================================================================
Total params: 10,401
Trainable params: 10,401
Non-trainable params: 0
_________________________________________________________________
Есть ли у Кераса что-то особенное в конце эпохи?Я не мог найти ничего, кроме стандартного обратного вызова логгера.Я также написал собственный обратный вызов, который оценивает мою модель в каждом пакете и сохраняет результаты, и когда я строю график с течением времени, кажется, что он не взрывается и не делает ничего странного.Похоже, что он постепенно улучшается, а затем тренировка умирает.