Я сохраняю модель keras двумя способами: 1. "ModelCheckpoint" 2. "save_weights" после обучения модели.
Но производительность этих двух различается при загрузке обученной модели с использованием «load_weights» и «прогноз».
Мой код выглядит следующим образом
Обучить и сохранить модель
model_checkpoint = ModelCheckpoint("Model_weights.hdf5", verbose=1, save_best_only=True)
early_stopping = EarlyStopping(monitor='val_loss', patience=20, verbose=1, restore_best_weights=True)
hist = Model.fit(x=train_dict, y=train_label,
batch_size=batch_size, epochs=epochs,
validation_data=(valid_dict, valid_label),
callbacks=[csv_logger, early_stopping, model_checkpoint])
Model.save_weights("Model_weights.h5")
Нагрузка обученной модели и теста
Model = create_model() # Construct model skeleton
hdf5_model = load_model("Model_weights.hdf5")
h5_model = load_model("Model_weights.h5")
Есть разница между "hdf5_model.predict (поезд)" и "h5_model.predict (поезд)"
1 ответ
Во-первых, вам нужно понять, что на самом деле делает ModelCheckpoint. Это экономит только лучший вес. Вы можете видеть потери и точность для каждой эпохи во время тренировки. Он меняется в каждую эпоху. Иногда он увеличивается, а иногда уменьшается, поскольку модель постоянно обновляет свои веса.
Предположим ситуацию. Вы тренируете свою модель на 50 эпох. Возможно, что вы получите убыток = 0,25 в 45-ю эпоху и потерю = 0,37 для 50-й эпохи. Это нормально. ModelCheckpoint сэкономит только вес 45-й эпохи. Он не будет обновляться в 50-ю эпоху. ModelCheckpoint сохраняет вес только в том случае, если потери уменьшаются (вы также можете изменить логику с помощью параметра). Но если вы сохраните веса после завершения тренировки, вы сэкономите с потерей 0,37, что выше.
Это нормально, что модель, сохраненная через ModelCheckpoint, имеет меньшее значение потерь, а окончательная модель имеет более высокое значение. Вот почему вы получаете разные прогнозы от этих двух моделей.
Если вы посмотрите на график ниже, вы увидите, что наибольшая величина потерь была достигнута в 98-ю эпоху. Итак, ваш ModelCheckpoint сохраняет веса на 98-й эпохе и никогда не обновляет их.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.