Я получаю отрицательный убыток, используя PyCharm, и положительный, используя Google Colab или Kaggle.

Вопрос или проблема

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

Фон и Причины Различий В Потерях

  1. Различия в Системах и Средах:

    • Версии библиотек: Убедитесь, что версии TensorFlow, Keras и других библиотек совпадают в PyCharm и Google Colab. Разные версии могут использовать разные алгоритмы по умолчанию для вычисления потерь или могут иметь разные настройки.
    • Аппаратные различия: Возможно, настройки GPU и их версия в Google Colab и на вашем локальном компьютере отличаются, что может привести к различиям в вычислении.
  2. Определение Функций Потерь:

    • Ваша реализация функции потерь angular_loss может вести себя по-разному в зависимости от величин y_true и y_pred. Обратите внимание на то, как вычисляется потеря, особенно если входные данные содержат нулевые или очень маленькие значения, так как это может приводить к нестабильности вычислений.
  3. Обработка Выходных Данных:

    • Ошибка в преобразовании данных входа или выхода на разных платформах может вызвать расхождения в результате. Проверьте, верно ли обрабатываются данные перед их подачей в модель, в частности, как обрабатываются значения для Y1_regression и Y2_classification.
  4. Условия Обучения:

    • В процессе тренировки в PyCharm вы можете использовать разные параметры, такие как размер батча, алгоритм оптимизации и количество эпох. Убедитесь, что эти параметры идентичны между средами.

Метрики и Вывод Результатов

Теперь о том, что касается выполнимых метрик обучения в Google Colab. Если вы не видите метрики классификации, это может быть связано с тем, как настроен вывод в каждой среде:

  • Мониторинг Метрик: Убедитесь, что вы правильно определили метрики в функции model.compile(). Это предполагает, что вы получаете значения для каждого вывода отдельно.
  • Обратите Внимание на Построение Графиков: В Google Colab вы можете более эффективно визуализировать графики с метриками благодаря встроенным инструментам. Используйте history для анализа метрик по эпохам.

Рекомендации

  1. Проверьте и сопоставьте все используемые библиотеки: Используйте одну и ту же версию TensorFlow и Keras на всех платформах.
  2. Анализируйте данные: Проверьте подготовленные данные, чтобы убедиться, что они корректно нормализованы.
  3. Логи обучения: Используйте более детализированные логи для отображения значений потерь и метрик после каждой эпохи, чтобы легче было идентифицировать ненормальности.
  4. Тестовые оценки: После тренировки убедитесь, что вы правильно оцениваете модель и сохраняете ее состояние.
  5. Используйте консольный вывод для диагностики: Печатайте промежуточные значения метрик во время обучения, чтобы видеть аномалии.

Заключение

Различия в полученных значениях потерь и метриках различных сред исполнения могут возникать по нескольким причинам, и для их устранения необходимо учитывать множество факторов. Тем не менее, соблюдая предложенные рекомендации и проверяя каждую часть вашего кода и данных, вы сможете добиться согласованных результатов в обеих средах. Удачи с вашим проектом!

Оцените материал
Добавить комментарий

Капча загружается...