Интерпретация потери / точности обучения против потери / точности проверки - PullRequest
2 голосов
/ 25 апреля 2020

У меня есть несколько вопросов о том, как интерпретировать производительность некоторых оптимизаторов в MNIST с использованием сети Lenet5, и что точные данные графиков потери / точности по сравнению с графиками потерь / точности обучения показывают нам. Таким образом, в Керасе все делается с использованием стандартной сети LeNet5, и она рассчитана на 15 эпох с размером пакета 128.

Есть два графика: поезд cc против вал cc и потеря поезда против потери вальса. Я сделал 4 графика, потому что я запускал его дважды, один раз с validation_split = 0.1 и один раз с validation_data = (x_test, y_test) в параметрах model.fit. В частности, здесь показана разница:

train = model.fit(x_train, y_train, epochs=15, batch_size=128, validation_data=(x_test,y_test), verbose=1)
train = model.fit(x_train, y_train, epochs=15, batch_size=128, validation_split=0.1, verbose=1)

Вот графики, которые я создал:

using validation_data=(x_test, y_test):

enter image description here

using validation_split=0.1:

enter image description here

Итак, мои два вопроса:

1.) Как мне интерпретировать оба поезда: cc против val cc и потеря поезда против Val cc графики? Как то, что он говорит мне точно, и почему разные оптимизаторы имеют разную производительность (то есть графики тоже разные).

2.) Почему графики меняются, когда я вместо этого использую validation_split ? Какой из них лучше выбрать?

1 Ответ

2 голосов
/ 25 апреля 2020

Я попытаюсь дать ответ

  1. Вы можете видеть, что к концу обучения точность немного выше, чем точность проверки, а потеря обучения немного ниже, чем потеря проверки. Это намекает на переоснащение, и если вы тренируетесь для большего количества эпох, разрыв должен увеличиться.

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

    Разные оптимизаторы обычно создают разные графики, потому что они обновляют параметры модели по-разному. Например, ванильный SGD будет обновляться с постоянной скоростью для всех параметров и на всех этапах обучения. Но если вы добавите импульс, скорость будет зависеть от предыдущих обновлений и, как правило, приведет к более быстрой конвергенции. Это означает, что вы можете достичь той же точности, что и ванильный SGD за меньшее количество итераций.

  2. Графики будут меняться, потому что тренировочные данные будут изменены, если вы разделитесь случайным образом. Но для MNIST вы должны использовать стандартное тестовое разделение, предоставляемое с набором данных.

...