Я тренирую бинарный классификатор с использованием Keras.
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=[auroc,'accuracy'])
Я использую собственную метрику, AUROC. как здесь
import tensorflow as tf
from sklearn.metrics import roc_auc_score
def auroc(y_true, y_pred):
return tf.py_func(roc_auc_score, (y_true, y_pred), tf.double)
Пока что я закодировал свою цель как горячее кодирование
и у меня был последний слой как
from keras.utils import to_categorical
y = to_categorical(y)
[...]
model.add(Dense(2, activation='sigmoid'))
Я узнал, что в принципе здесь Keras binary_crossentropy vs категорическая_crossentropy производительность? Я не должен выполнять категориальное кодирование, и я должен предсказывать только один класс, используя
# y = to_categorical(y)
[...]
model.add(Dense(1, activation='sigmoid'))
Однако, если я применю это и только это изменение, моя тренировка auroc
резко изменится с высоких 0,90 до 0,50. Еще более странно, что val_auroc
потеря кажется незатронутой
Как это случилось?