Нормально ли иметь историю обучения, очень похожую на историю проверки?

#python #keras #plot

#python #keras #график

Вопрос:

Я обучил модель для 50 эпох, разделив набор данных со следующей пропорцией:

  • X_train, Y_train = 70%
  • X_validation, Y_validation = 20%
  • X_test, Y_test = 10%

Все разделение выполняется с помощью функции train_test_split(shuffle=True) keras:

 X = np.load(....)
Y = np.load(....)

# Split on training and validation
N_validation = int(len(X) * 0.2)
X_train, X_validation, Y_train, Y_validation = train_test_split(X, Y, test_size=N_validation)

# Split Train data once more for Test data
N_test = int(len(X_train) * 0.1)
X_train, X_test, Y_train, Y_test = train_test_split(X_train, Y_train, test_size=N_test)
 

Вот график истории.

Как вы можете видеть из истории, точность / потеря проверки очень похожа на точность / потерю обучения. Иногда потери при проверке даже ниже, чем потери при обучении. Что касается этого последнего утверждения, я прочитал здесь, что это может быть вызвано высоким значением отсева. Это может быть так, поскольку у меня есть уровень отсева с rate = 0.3. Чего я не понял, так это является ли это проблемой или нет.

Тестирование модели на тестовом наборе, у меня точность 91%.

Ответ №1:

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

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

Переобучение — это когда модель хорошо работает в обучающем наборе, но плохо работает в тестовом наборе. Это тот случай, когда происходит то, что вы упомянули: «потеря проверки даже ниже, чем потеря обучения». Переобучение часто решается путем упрощения сложности модели с помощью таких методов, как отсев.

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

Однако одна из проблем заключается в том, что вы можете перепутать набор данных для обучения / тестирования во время обучения, если вы перетасовываете данные или не установили постоянное случайное начальное значение для многократного разделения. Если это не так, не волнуйтесь!

Комментарии:

1. Хороший ответ, просто небольшая коррекция потери при проверке <потери при обучении обычно не происходят при переобучении, скорее наоборот, мы видим потери при обучении намного ниже, чем потери при проверке.

2. Спасибо за ответ. Я отредактировал вопрос, добавив код для разделения данных. Как вы можете видеть, я перетасовываю данные, но не должно быть смешивания поездов / тестов, верно? Что касается разъяснения @KhanisRok, я думаю, он прав: переобучение происходит, когда потеря проверки> потеря обучения .

3. @Famosi Вы можете постоянно устанавливать начальное значение, задав параметр random_state=42 в train_test_split функции. Это будет особенно необходимо, если вы собираетесь оценить модель или продолжить обучение после перезапуска сеанса.