我正在尝试运行LSTM,当我使用以下代码时:
model.compile(optimizer='rmsprop', loss='binary_crossentropy',
metrics=['accuracy', 'f1score', 'precision', 'recall'])它返回:
ValueError: ('Unknown metric function', ':f1score').我已经搜索过了,找到了这个网址:https://github.com/fchollet/keras/issues/5400
此url中"model.compile“部分的"metrics”与我的完全相同,并且没有返回任何错误。
发布于 2017-04-12 02:58:23
我怀疑您使用的是Keras 2.X。正如https://keras.io/metrics/中所解释的,您可以创建自定义指标。这些指标似乎只将(y_true, y_pred)作为函数参数,因此fbeta的通用实现是不可能的。
这是一个基于keras 1.2.2源代码的f1_score实现。
import keras.backend as K
def f1_score(y_true, y_pred):
# Count positive samples.
c1 = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
c2 = K.sum(K.round(K.clip(y_pred, 0, 1)))
c3 = K.sum(K.round(K.clip(y_true, 0, 1)))
# If there are no true samples, fix the F1 score at 0.
if c3 == 0:
return 0
# How many selected items are relevant?
precision = c1 / c2
# How many relevant items are selected?
recall = c1 / c3
# Calculate f1_score
f1_score = 2 * (precision * recall) / (precision + recall)
return f1_score要使用,只需在定义自定义指标之后,在编译模型时将f1_score添加到指标列表中。例如:
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy',f1_score])发布于 2019-09-01 06:13:38
K.epsilon()在这段代码中工作得很好。您可以在c1、c2和c3的定义中使用它。
https://stackoverflow.com/questions/43345909
复制相似问题