Получить confution_matrix из y_true и y_pred в кастомной функции потерь Keras

Занимаюсь проблемой бинарной класификации ( дисбаланс классов примерно 0.65 на 0.35 ) Датасет очень проблемный и лучше не получить никак ( разве что сэмплирование SMOTE по Томеку немного помогло ) и точность очень низкая. Разные методы относят большинство меток то к одному то к другому классу, но проверить в процессе обучения как идут дела я не могу, так как оценить нормально точность могу только по confusion_matrix ( выдает число True Negative(tn), True Positive(tp), False Negative(fn) и False Positive(fp))

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

def _loss_np(y_true, y_pred):
  y_pred = np.clip(y_pred, _EPSILON, 1.0-_EPSILON)
  out = -(y_true * np.log(y_pred) + (1.0 - y_true) * np.log(1.0 - y_pred))
  return np.mean(out, axis=-1)

Но для меня данные вещи абсолютно бесполезные, т.к. нужно взаимодействовать не с массивами, а с тензорами, коими являются y_true и Проитерировать их не могу, при попытки преобразовать в другой вид валяться ошибки, ну а метод confusion_matrix из scikit learn не работает с тензорами.

Результат функции потерь должен выглядеть так

частота метки 1 = 0.35 (для tp)
частота метки 0 = 0.65 (для tn)
(tp*0.65 + tn*0.35)/(tp*0.35 + tn*0.65 + fp*0.35 + fn*0.65)

Ответы (0 шт):