Хорошая точность обучения, но низкая точность проверки - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь реализовать остаточную сеть, чтобы классифицировать изображения в наборе данных CIFAR10 для проекта, и у меня есть рабочая модель, которая имеет логарифмическую точность, но точность проверки на этом плато. Я использовал пакетную нормализацию и relu после большинства слоев и использовал softmax в конце.

Вот мое разделение данных:

(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

Вот мой код для компиляции и обучения модели

resNet50.compile(optimizer='adam',loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),metrics=['accuracy'])
resNet50.fit(train_images, train_labels, epochs=EPOCHS, validation_data=(test_images, test_labels))

enter image description here

enter image description here

Что может быть причиной этого плато проверки и что может улучшить мою модель ?

Спасибо заранее за ваши отзывы и комментарии.

1 Ответ

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

Это очень распространенная проблема, это форма переоснащения.

Я приглашаю вас прочитать книгу «Глубокое обучение» Иана Гудфеллоу и Йошуа Бенжио и Аарона Курвилля, особенно эту главу (в свободном доступе), она очень информативна.

Короче говоря, вы, похоже, выбрали модель (ResNet50 + параметры обучения по умолчанию), в которой слишком много места для вашей проблемы и данных. Если вы выберете модель, которая слишком проста, вы получите кривые обучения и оценки очень близко друг к другу, но с худшими характеристиками, чем вы могли бы достичь. Если вы выберете модель, которая слишком сложна (как в данном случае немного), вы можете достичь гораздо лучшей производительности на тренировочных данных, но оценка не будет на том же уровне и даже может быть довольно плохой. Это называется переоснащение на тренировочном наборе.

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

Таким образом, вам нужно уменьшить емкость вашей модели для вашей проблемы. Есть разные способы сделать это, они не будут одинаково эффективны ни с точки зрения уменьшения переоснащения, ни с точки зрения снижения производительности вашего поезда. Лучше всего, как правило, добавлять больше данных об обучении, если вы можете. Если вы не можете, следующие хорошие вещи для добавления - регуляризация , такие как увеличение данных, выпадение , регуляризация L1 или L2 и ранняя остановка. Последнее особенно полезно, если ваша эффективность проверки начинает снижаться в какой-то момент, а не просто плато. Это не ваш случай, поэтому он не должен быть вашим первым треком.

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

...