我正在使用Keras训练二进制分类器。
model.compile(loss='binary_crossentropy',
optimizer='rmsprop',
metrics=[auroc,'accuracy'])
我使用自定义指标AUROC。as in here
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 categorical_crossentropy performance?我不应该执行分类编码,而应该使用
只预测一个类# y = to_categorical(y)
[...]
model.add(Dense(1, activation='sigmoid'))
但是,如果我应用此方法,并且只有此更改,我的训练auroc
就会从0.90高变为0.50。更奇怪的是,val_auroc
的损失似乎不受影响
那是怎么发生的?