#python #tensorflow #machine-learning #keras
#python #tensorflow #машинное обучение #keras
Вопрос:
Какая именно польза от указания родительского класса, не используя его ?!
Я пытаюсь реализовать потерю Хубера в TensorFlow. Я наткнулся на реализацию, которую вы можете проверить на изображении здесь.
Мы можем ясно видеть, что мы ничего не наследуем от суперкласса (модуль потерь). Тогда какой смысл настраивать Loss в качестве родительского класса и объявлять оператор super.init.
Комментарии:
1. Для реализации пользовательских функций потерь с использованием классов в tensorflow 2 мы должны наследовать
Loss
класс от tensorflow.keras.loss . Из изображения мы видим, что они добавили дополнительный атрибутthreshold
и переопределилиcall
метод. Вы можете сослаться на реализациюLoss
класса здесь . Если вас не устраивают функции потерь на основе классов, вы также можете реализовать функции потерь на основе функций в tensorflow 2.2. Да, понял. Большое вам спасибо!
Ответ №1:
Потеря — это абстрактный класс, и его наследование означает, что вам нужно переопределить метод вызова, иначе он выдаст ошибку. Вы переопределили параметры инициализации в функции HuberLoss, но все равно должны вызвать super.init, поскольку некоторые функции, которые TF может использовать внутри, например, «_get_reduction», реализованы в классе Loss, и переменные этого должны быть инициализированы, что выполняется super.init() . Вы можете проверить реализацию здесь