Keras model.evaluate返回与sklearn的函数

时间:2018-02-28 06:14:39

标签: python deep-learning keras

当我训练模型时,我使用MAE作为指标:

my_model.compile(loss='categorical_crossentropy', optimizer=adam, metrics=['mae'])

训练模型后,我预测测试集并使用sklearn的mean_absolute_error函数在测试集上找到MAE:

    def test(self):
        preds = self.model.predict(self.xtest)
        pred_int = [np.argmax(x) - 2 for x in preds]
        mae = mean_absolute_error(self.ytest, pred_int)
        print("Sklearn MAE: {}".format(mae))

输出:

Sklearn MAE: 1.6824460780353825

然而,当我使用Keras的评估功能时,我会得到一个不同的数字:

score = self.model.evaluate(x=self.xtest,y=self.y_cat_test)
print("model.evaluate MAE on test set: {}".format(score[1]))

其中

self.y_cat_test = to_categorical(self.ytest, num_classes=params['num_cat'])

哪个输出:

model.evaluate MAE on test set: 0.30854440440807257

我尝试创建自定义指标,因此我编写了以下函数:

def MY_METRIC(self, y_true, y_pred):
    x = np.abs(y_pred - y_true)
    return x

当我将其用作模型的度量时,它返回与Keras的MAE函数相同的数字。问题是,上面的函数不是MAE。

Wikipedia page on MAE

当我将自定义指标更改为反映MAE等式

 def MY_METRIC(self, y_true, y_pred):
        x = np.average(np.abs(y_pred - y_true))
        return x

我收到以下错误:

 AttributeError: 'DType' object has no attribute 'type'

有谁知道为什么会这样?

0 个答案:

没有答案