当我在sklearn.metrics中由roc_auc_curve训练模型时,我想在每个时期计算验证集(x_val,y_val)的AUC。
堆叠我的神经网络模型后:
model=Sequential()
.
.
.
model.add(Dense(...))
我有两种不同的方法来计算AUC。 第一个是通过tf.py_func:
def auc(y_true, y_pred):
return tf.py_func(roc_auc_score, (y_true, y_pred), tf.double)
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['accuracy',auc])
model.fit(...,validation_data=(x_val,y_val),...)
第二个是通过keras.callbacks:
class train_history(Callback):
def __init__(self,validation_data):
self.x_val = validation_data[0]
self.y_val = validation_data[1]
def on_train_begin(self, logs={}):
self.val_auc= []
def on_epoch_end(self, epoch, logs={}):
y_pred_val = self.model.predict(self.x_val)
val_rocauc = roc_auc_score(self.y_val, y_pred_val)
self.val_auc.append(logs['val_rocauc'])
his=train_history(validation_data=(x_val, y_val))
checkpoint=[his]
model.fit(...,validation_data=(x_val,y_val),callbacks=checkpoint,...)
但这两种方法的结果不同。在检查了这两种方法后,第二种似乎正确。
有人知道为什么吗?非常感谢。