Что я пытаюсь сделать здесь?с поезда: 100%, с теста: 80% это означает переоснащение? - PullRequest
1 голос
/ 14 марта 2019
classifier.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
classifier.fit(X_train, y_train, epochs=50, batch_size=100)

Epoch 1/50
27455/27455 [==============================] - 3s 101us/step - loss: 2.9622 - acc: 0.5374

Я знаю, что компилирую свою модель в первой строке, а вторую.Я знаю что такое оптимизатор.Меня интересует значение metrics=['accuracy'] и что именно означает acc: XXX, когда я компилирую модель.Кроме того, я получаю acc : 1.000, когда я тренирую свою модель (100%), но когда я тестирую свою модель, я получаю точность 80%.Моя модель переоснащается?

Ответы [ 4 ]

2 голосов
/ 14 марта 2019

Хорошо, давайте начнем с верха,

Сначала, metrics = ['accuracy'], Модель может оцениваться по нескольким параметрам, точность является одной из метрик, другая может быть binary_accuracy, categorical_accuracy,sparse_categorical_accuracy, top_k_categorical_accuracy и sparse_top_k_categorical_accuracy, это только встроенные, вы даже можете создавать собственные метрики, чтобы понять метрики более подробно, вам нужно иметь четкое понимание loss в нейронной сети,Вы могли бы знать, что функция потерь должна быть дифференцируемой, чтобы иметь возможность выполнять обратное распространение, это не обязательно в случае metrics, метрики используются исключительно для оценки модели и, следовательно, могут даже быть функциями, которые не являются дифференцируемыми, в Kerasкак уже упоминалось в их документации

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

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

TLDR;Метрики - это просто функции потерь, которые не используются при обратном распространении, но используются для оценки модели.

Теперь acc:xxx может просто заключаться в том, что он даже не завершил ни одного распространения мини-пакета и, следовательно, не может дать оценку точности ещеЯ не обращал на это особого внимания, но обычно он остается там в течение нескольких секунд и, таким образом, является предположением.

Наконец 20% Снижение производительности модели при снятии с эксплуатацииобучение, да, это может быть случай переоснащения, но никто не может знать наверняка, не глядя на ваш набор данных, но, скорее всего, да, это переобучение, и вам может понадобиться посмотреть на данные, на которых он работает плохо, чтобы узнать причину.

Если что-то неясно, не имеет смысла, не стесняйтесь комментировать.

1 голос
/ 14 марта 2019

Точность 100% в наборе данных поезда при точности 80% в наборе тестовых данных не означает, что ваша модель соответствует требованиям. Более того, это почти наверняка не подходит, если ваша модель оснащена гораздо более эффективными параметрами, чем число обучающих выборок [2], [5] (пример безумно большого образца [1]). Это противоречит обычной статистической теории обучения, но это эмпирические результаты.

Для моделей с числом параметров, превышающим количество выборок, лучше продолжать оптимизировать логистическую или кросс-энтропийную потерю даже после того, как ошибка обучения равна нулю, и потеря обучения чрезвычайно мала, и даже если потеря проверки увеличивается [3]. Это может сохраняться даже независимо от размера партии [4].

Уточнения (редактировать)

  • «Модели», о которых я говорил, являются нейронными сетями с двумя или более скрытыми слоями (могут быть также сверточными слоями до плотных слоев).
  • [1] цитируется, чтобы показать явное противоречие с классической статистической теорией обучения, которая говорит, что большие модели могут подходить без некоторой формы регуляризации.
  • Я бы пригласил любого, кто не согласен с "почти наверняка, не подходит" , чтобы привести воспроизводимый пример, в котором модели, скажем для MNIST / CIFAR и т. Д. С несколькими сотнями тысяч параметров, соответствуют (в некотором смысле увеличивается с кривой итераций тестовой ошибки).

[1] Ноам Шазир, Азалия Мирхосейни, Кшиштоф Мазиарз, Энди Дэвис, Куок В. Ле, Джеффри Э. Хинтон и Джефф Дин. Невероятно большие нейронные сети: редкостное смешение экспертов. CoRR, abs / 1701.06538, 2017.

[2] Lei Wu, Zhanxing Zhu, et al. На пути к пониманию обобщения глубокого обучения: перспективы потери ландшафта. Препринт arXiv arXiv: 1706.10239, 2017.

[3] Даниэль Судри, Элад Хоффер, Мор Шпигель Наксон, Сурья Гунасекар и Натан Сребро. Неявное смещение градиентного спуска на разделяемые данные. Журнал исследований машинного обучения, 19 (1): 2822–2878, 2018.

[4] Элад Хоффер, Итай Хубара и Даниэль Судри. Тренируйтесь дольше, лучше обобщайте: устраняя пробел в обобщении в крупномасштабном обучении нейронных сетей. InAdvances в системах обработки нейронной информации, стр. 1731–1741, 2017. `

[5] Чиюань Чжан, Сэми Бенжио, Мориц Хардт, Бенджамин Рехт и Ориол Виньялс. Понимание глубокого обучения требует переосмысления обобщений. ArXiv preprintarXiv: 1611.03530, 2016.

0 голосов
/ 14 марта 2019

Таким образом, значение metrics=['accuracy'] на самом деле зависит от того, какую функцию потерь вы используете.Вы можете видеть, как keras управляет этим от строки 375 и ниже.Так как вы используете categoryorical_crossentropy, ваш случай следует логике в elif (строка 386).Следовательно, ваша метрическая функция установлена ​​на

metric_fn = metrics_module.sparse_categorical_accuracy

См. этот пост для описания логики sparse_categorical_accuracy, она должна очистить значение "точности" в вашем случае.По сути, он просто подсчитывает, сколько ваших прогнозов (класс с максимальной вероятностью) был таким же, как и истинный класс.

Поезд против точности проверки может показать признак переопределения.Чтобы проверить этот график, точность поезда и точность валидации сравниваются друг с другом и видно, в какой момент точность валидации начинает снижаться.Следуйте this для хорошего описания того, как построить график точности и потерь и т. Д., Чтобы проверить на переоснащение.

0 голосов
/ 14 марта 2019

Начиная с первой части вашего вопроса -

Keras определяет Metric как " функцию, которая используется для оценки производительности вашей модели ". В этом случае вы используете точность как функцию, чтобы судить, насколько хороша ваша модель. (Это норма)

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

Наконец, возможно, что вы получили модель наряда, учитывая то, что вы нам сказали, но есть простые решения

...