Интерфейсы на Python

#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() . Вы можете проверить реализацию здесь