#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
функции. Это будет особенно необходимо, если вы собираетесь оценить модель или продолжить обучение после перезапуска сеанса.