我试图运行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
"指标"在" model.compile"此网址中的部分与我的完全相同,并且不会返回任何错误。
答案 0 :(得分:7)
我怀疑你使用的是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])
答案 1 :(得分:0)
K.epsilon()在此代码中运行良好。您可以在c1,c2和c3的定义中使用它。