在Keras v2中计算精度、召回率和F1,我做得对吗?

2024-09-27 00:21:03 发布

您现在位置:Python中文网/ 问答频道 /正文

关于如何在kerasv2中获得精确性、召回率和F1分数,已经有了一个question,这是我正在使用的方法,但问题是:我做得对吗?在

首先,F.Cholletsays他从Keras的版本2中删除了这三个度量,因为它们是基于批处理的,因此不可靠。我的想法是basque21在epoch_end上使用带方法的回调函数,这通常不是批处理独立的,因为它是在epoch end(=在所有批处理完成之后)计算的吗?在

这是我使用的代码。在模型.拟合方法添加参数callbacks=[metrics],并定义字典myhistory和类Metrics,如下所示(代码改编自basque21):

myhistory={}
myhistory['prec']=[]
myhistory['reca']=[]
myhistory['f1']=[]

class Metrics(keras.callbacks.Callback):
    def on_epoch_end(self, batch, logs={}):
        predict = numpy.asarray(self.model.predict(self.validation_data[0]))
        predict = a=numpy.array(predict.flatten()>=0.5,dtype=int)
        targ = self.validation_data[1]
        targ=numpy.array(targ.flatten()>=0.5,dtype=int)
        self.prf=precision_recall_fscore_support(targ, predict)
        print("Precision/recall/f1 class 0 is {}/{}/{}, precision/recall/f1 class 1 is {}/{}/{}".format(self.prf[0][0], self.prf[1][0], self.prf[2][0], self.prf[0][1], self.prf[1][1], self.prf[2][1]))
        myhistory['prec'].append(self.prf[0][1])
        myhistory['reca'].append(self.prf[1][1])
        myhistory['f1'].append(self.prf[2][1])
        return
metrics = Metrics()

装配完成后,我将在公共图上显示所有内容,如下所示:

^{pr2}$

我用“一减精度”等等,让所有的东西都在接近于零的范围内。但我不明白的是,正如你在情节中看到的, enter image description here虽然验证损失正在增加(由于过度拟合),但精确度、召回率似乎有所不同,因此F1保持相对恒定。我做错什么了?在

这个例子来自Chapter 3 of F. Chollet's book,它是关于IMDB文本分类的,我只显示了类1的分数。在


Tags: 方法selfnumpypredictclassmetricsendf1

热门问题