When using mectrics in model.compile in keras, report ValueError: ('Unknown metric function', ':f1score')
When using mectrics in model.compile in keras, report ValueError: ('Unknown metric function', ':f1score')
我正在尝试 运行 一个 LSTM,当我使用下面的代码时:
model.compile(optimizer='rmsprop', loss='binary_crossentropy',
metrics=['accuracy', 'f1score', 'precision', 'recall'])
它returns:
ValueError: ('Unknown metric function', ':f1score').
我进行了搜索并找到了这个 url:
https://github.com/fchollet/keras/issues/5400
这个url中"model.compile"部分的"metrics"和我的完全一样,没有返回错误
我怀疑您正在使用 Keras 2.X。如 https://keras.io/metrics/ 中所述,您可以创建自定义指标。这些指标似乎只采用 (y_true, y_pred)
作为函数参数,因此不可能实现 fbeta 的通用化。
这里是f1_score
基于keras 1.2.2源码的实现。
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])
K.epsilon() 在此代码中运行良好。您可以在 c1、c2 和 c3 的定义中使用它。
我正在尝试 运行 一个 LSTM,当我使用下面的代码时:
model.compile(optimizer='rmsprop', loss='binary_crossentropy',
metrics=['accuracy', 'f1score', 'precision', 'recall'])
它returns:
ValueError: ('Unknown metric function', ':f1score').
我进行了搜索并找到了这个 url: https://github.com/fchollet/keras/issues/5400
这个url中"model.compile"部分的"metrics"和我的完全一样,没有返回错误
我怀疑您正在使用 Keras 2.X。如 https://keras.io/metrics/ 中所述,您可以创建自定义指标。这些指标似乎只采用 (y_true, y_pred)
作为函数参数,因此不可能实现 fbeta 的通用化。
这里是f1_score
基于keras 1.2.2源码的实现。
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])
K.epsilon() 在此代码中运行良好。您可以在 c1、c2 和 c3 的定义中使用它。