关于如何在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}$我用“一减精度”等等,让所有的东西都在接近于零的范围内。但我不明白的是,正如你在情节中看到的, 虽然验证损失正在增加(由于过度拟合),但精确度、召回率似乎有所不同,因此F1保持相对恒定。我做错什么了?在
这个例子来自Chapter 3 of F. Chollet's book,它是关于IMDB文本分类的,我只显示了类1的分数。在
目前没有回答
相关问题 更多 >
编程相关推荐