Вопрос или проблема
У меня есть данные в виде изображений и 2 столбца: один содержит значения тангенса, а второй – для указания, являются ли мои значения отрицательными или положительными. У меня есть два выхода: классификация и регрессия. Когда я запускаю свой код в Pycharm, я получаю отрицательные значения в потере для регрессии, но когда я использую Google Colab, он выдает положительные значения. Однако я не получаю метрики классификации и потерю регрессии во время обучения; единственное, что появляется, – это общая потеря и метрики регрессии и потеря классификации. Я использую модель CNN.
@keras.utils.register_keras_serializable(package="Custom")
def angular_loss(y_true, y_pred):
angles_true = tf.math.atan(y_true) * 180.0 / np.pi
angles_pred = tf.math.atan(y_pred) * 180.0 / np.pi
return tf.abs(angles_true - angles_pred)
@keras.utils.register_keras_serializable(package="Custom")
def rmse_degrees(y_true, y_pred):
angles_true = tf.math.atan(y_true) * 180.0 / np.pi
angles_pred = tf.math.atan(y_pred) * 180.0 / np.pi
return tf.sqrt(tf.reduce_mean(tf.square(angles_true - angles_pred)))
# Компилируем модель
model.compile(
optimizer="rmsprop",
loss={
'output_regression': angular_loss,
'output_classification': 'binary_crossentropy'
},
metrics={
'output_regression': [rmse_degrees],
'output_classification': ['accuracy']
}
)
# Определяем колбек ModelCheckpoint для сохранения лучшей модели
callbacks = [
keras.callbacks.ModelCheckpoint("model8.keras", save_best_only=True, monitor="loss", mode="min")
]
# Обучаем модель без валидационных данных
history = model.fit(
X_train_images, [Y1_regression, Y2_classification],
epochs=10,
batch_size=64,
callbacks=callbacks
)
# Загружаем лучшую модель
best_model = load_model("model8.keras", custom_objects={'angular_loss': angular_loss, 'rmse_degrees': rmse_degrees})
# Оцениваем модель на тестовом наборе
test_loss, test_regression_loss, test_classification_loss, test_rmse_deg, test_accuracy = best_model.evaluate(
X_test_images, [Y1_regression_test, Y2_classification_test], verbose=0
)
# Печатаем результаты
print("\nРезультаты на тестовом наборе :")
print(f"общая потеря : {test_loss}")
print(f"потеря регрессии (в градусах) : {test_regression_loss}")
print(f"потеря классификации : {test_classification_loss}")
print(f"RMSE в градусах : {test_rmse_deg}")
print(f"Метрики классификации : {test_accuracy}")
Ответ или решение
Вопрос, который вы задаете, касается различий в получении потерь (loss) в процессе обучения модели свёрточной нейронной сети (CNN) в разных средах исполнения, таких как PyCharm и Google Colab или Kaggle. Это может вызвать путаницу, особенно при наличии нескольких выводов, таких как регрессия и классификация. Давайте подробно разберёмся в этой ситуации, чтобы прояснить причины таких несоответствий.
Фон и Причины Различий В Потерях
-
Различия в Системах и Средах:
- Версии библиотек: Убедитесь, что версии TensorFlow, Keras и других библиотек совпадают в PyCharm и Google Colab. Разные версии могут использовать разные алгоритмы по умолчанию для вычисления потерь или могут иметь разные настройки.
- Аппаратные различия: Возможно, настройки GPU и их версия в Google Colab и на вашем локальном компьютере отличаются, что может привести к различиям в вычислении.
-
Определение Функций Потерь:
- Ваша реализация функции потерь
angular_loss
может вести себя по-разному в зависимости от величинy_true
иy_pred
. Обратите внимание на то, как вычисляется потеря, особенно если входные данные содержат нулевые или очень маленькие значения, так как это может приводить к нестабильности вычислений.
- Ваша реализация функции потерь
-
Обработка Выходных Данных:
- Ошибка в преобразовании данных входа или выхода на разных платформах может вызвать расхождения в результате. Проверьте, верно ли обрабатываются данные перед их подачей в модель, в частности, как обрабатываются значения для
Y1_regression
иY2_classification
.
- Ошибка в преобразовании данных входа или выхода на разных платформах может вызвать расхождения в результате. Проверьте, верно ли обрабатываются данные перед их подачей в модель, в частности, как обрабатываются значения для
-
Условия Обучения:
- В процессе тренировки в PyCharm вы можете использовать разные параметры, такие как размер батча, алгоритм оптимизации и количество эпох. Убедитесь, что эти параметры идентичны между средами.
Метрики и Вывод Результатов
Теперь о том, что касается выполнимых метрик обучения в Google Colab. Если вы не видите метрики классификации, это может быть связано с тем, как настроен вывод в каждой среде:
- Мониторинг Метрик: Убедитесь, что вы правильно определили метрики в функции
model.compile()
. Это предполагает, что вы получаете значения для каждого вывода отдельно. - Обратите Внимание на Построение Графиков: В Google Colab вы можете более эффективно визуализировать графики с метриками благодаря встроенным инструментам. Используйте
history
для анализа метрик по эпохам.
Рекомендации
- Проверьте и сопоставьте все используемые библиотеки: Используйте одну и ту же версию TensorFlow и Keras на всех платформах.
- Анализируйте данные: Проверьте подготовленные данные, чтобы убедиться, что они корректно нормализованы.
- Логи обучения: Используйте более детализированные логи для отображения значений потерь и метрик после каждой эпохи, чтобы легче было идентифицировать ненормальности.
- Тестовые оценки: После тренировки убедитесь, что вы правильно оцениваете модель и сохраняете ее состояние.
- Используйте консольный вывод для диагностики: Печатайте промежуточные значения метрик во время обучения, чтобы видеть аномалии.
Заключение
Различия в полученных значениях потерь и метриках различных сред исполнения могут возникать по нескольким причинам, и для их устранения необходимо учитывать множество факторов. Тем не менее, соблюдая предложенные рекомендации и проверяя каждую часть вашего кода и данных, вы сможете добиться согласованных результатов в обеих средах. Удачи с вашим проектом!