当我训练模型时,我使用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。
当我将自定义指标更改为反映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'
有谁知道为什么会这样?