在Keras训练期间,tf.py_func和sklearn产生了不同的AUC

时间:2018-11-02 05:55:07

标签: python tensorflow keras

当我在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,...)

但这两种方法的结果不同。在检查了这两种方法后,第二种似乎正确。

有人知道为什么吗?非常感谢。

0 个答案:

没有答案