Представьте функцию потерь как поверхность, имеющую столько размеров, сколько имеется свободных параметров в вашей модели. Каждая точка на этой поверхности соответствует набору значений параметров и связана со значением потерь (которое вы пытаетесь минимизировать). Я предполагаю, что вы тренируете эту модель CNN с каким-то алгоритмом градиентного спуска / обратного распространения (все Keras оптимизаторы попадают в эту категорию).
В этой настройке оценки градиента будут неизменно шумными , поскольку ваши обучающие данные не являются полной выборкой всего пробного пространства (не содержат все возможные входные значения, которые в противном случае были бы трудно решаемыми для реальных задач) и могут не иметь распределения, которое точно соответствует распределению набора проверки. Вы рассчитываете оценку градиента на основе неполной конечной выборки (возможно, бесконечной) вселенной . Следовательно, каждый шаг не будет точно направлен на минимизацию функции истинных потерь, но, надеюсь, будет достаточно близок, чтобы модель приблизилась к полезному решению. Даже если бы вы могли каким-то образом вычислить точный градиент, некоторые алгоритмы не будут точно следовать этому направлению (например, те, которые используют импульс ). Кроме того, даже следование точному направлению градиента может привести к увеличению значения потерь из-за перерегулирования (особенно при больших скоростях обучения).
Использование мини-пакетов (размер партии выбирается при вызове model.fit () , в вашем случае 32) также внесет некоторый дополнительный шум, так как градиенты для каждой итерации обновления веса будут рассчитываться не для всех доступных данных тренировки, а только для ограниченного подмножества (партии). Этот дополнительный шум - небольшая цена, которую нужно заплатить, учитывая значительный рост производительности мини-партии, что приводит к более быстрой конвергенции.
Фактически, некоторый шум действительно желателен, так как он может помочь оптимизатору уйти от локальных минимумов, как показано ниже (пример с игрушкой):
![Perfect gradient descent vs. Noisy gradient descent](https://i.stack.imgur.com/7Zl29.png)
Итак, чтобы ответить на ваш вопрос, вполне нормально иметь шипы, которые вы видите во время обучение, будь то проверка или потеря обучения, из-за причин, указанных выше, и того факта, что наборы проверки и обучения являются конечными и неполными образцами выборочного пространства. Я подозреваю, что показатели проверки могут быть еще более шумными, поскольку набор проверки обычно намного меньше выборки, чем обучающий набор, и не является целью оптимизации (распределение обучения / проверки может не полностью перекрываться).