Внезапное падение точности проверки во время обучения - PullRequest
0 голосов
/ 15 марта 2020

Когда я тренировал свою нейронную сеть, во время 8-й эпохи внезапное снижение точности валидации означало?

Train for 281 steps, validate for 24 steps Epoch 1/10 281/281 [==============================] - 106s 378ms/step - loss: 1.5758 - accuracy: 0.8089 - val_loss: 1.8909 - val_accuracy: 0.4766 Epoch 2/10 281/281 [==============================] - 99s 353ms/step - loss: 1.5057 - accuracy: 0.8715 - val_loss: 1.7364 - val_accuracy: 0.6276 Epoch 3/10 281/281 [==============================] - 99s 353ms/step - loss: 1.4829 - accuracy: 0.8929 - val_loss: 1.5347 - val_accuracy: 0.8398 Epoch 4/10 281/281 [==============================] - 99s 353ms/step - loss: 1.4445 - accuracy: 0.9301 - val_loss: 1.5551 - val_accuracy: 0.8047 Epoch 5/10 281/281 [==============================] - 99s 353ms/step - loss: 1.4331 - accuracy: 0.9412 - val_loss: 1.5043 - val_accuracy: 0.8659 Epoch 6/10 281/281 [==============================] - 97s 344ms/step - loss: 1.4100 - accuracy: 0.9639 - val_loss: 1.5562 - val_accuracy: 0.8151 Epoch 7/10 281/281 [==============================] - 96s 342ms/step - loss: 1.4140 - accuracy: 0.9585 - val_loss: 1.4935 - val_accuracy: 0.8737 Epoch 8/10 281/281 [==============================] - 96s 341ms/step - loss: 1.4173 - accuracy: 0.9567 - val_loss: 1.7569 - val_accuracy: 0.6055 Epoch 9/10 281/281 [==============================] - 96s 340ms/step - loss: 1.4241 - accuracy: 0.9490 - val_loss: 1.4756 - val_accuracy: 0.9023 Epoch 10/10 281/281 [==============================] - 96s 340ms/step - loss: 1.4067 - accuracy: 0.9662 - val_loss: 1.4167 - val_accuracy: 0.9648

1 Ответ

1 голос
/ 15 марта 2020

Внезапные потери в проверке и потере обучения происходят из-за пакетного обучения; по сути, конвергенция будет гладкой, только если мы будем тренироваться со всем набором данных, а не с партиями. Следовательно, нормально видеть такие падения (как для обучения, так и для проверки).

  • val_loss: 1.4935 - val_accuracy: 0.8737 (предыдущая эпоха)
  • val_loss: 1.7569 - val_accuracy: 0.6055 (Эпоха с выпадением)
  • val_loss: 1.4756 - val_accuracy: 0.9023 (Следующая эпоха)

Если вы посмотрите на потерю проверки, она просто увеличилась с 0.26; однако это привело к снижению вашей точности на 27%. В этом случае это связано с тем, что ваша модель не уверена, когда она делает прогноз (по крайней мере, на этом этапе обучения).

Представьте, что у вас есть модель бинарной классификации (между яблоками и апельсинами). При каждом прогнозе, когда основная правда - это яблоко, сеть на 51% уверена, что изображение - это яблоко. У нас есть яблоко ground_truth, и, как это делает Керас, порог достоверности по умолчанию составляет 50%. Тогда все прогнозы хороши, и у вас хорошая точность.

Однако сейчас наступает эпоха «проблематичности» c. Из-за изменившихся значений весов вашей нейронной сети после другой эпохи обучения, когда вы прогнозируете свой набор данных проверки, вы получаете уверенность в 48-49% для каждого яблока ground_truth, и снова, поскольку порог составляет 50%, вы получаете гораздо худшую точность, чем в предыдущую эпоху.

Этот конкретный случай, который вы испытываете, как вы можете теперь вывести из предыдущего объяснения, влияет не столько на потери, сколько на точность. Это не сильно влияет на потерю во время обратного распространения, потому что разница в прогнозе достоверности между 49% и 51% при вычислении потери не является очень существенной разницей в общей потере (как вы видите в своем случае, только 0,26% ). В конце концов, даже в «предыдущую эпоху», когда модель правильно предсказывала яблоко, нейронная сеть не была настолько уверенной в себе, обеспечив лишь 51% доверия к яблоку, а не 95%, например.

...