【发布时间】:2017-09-18 17:35:58
【问题描述】:
在删除之前,我尝试使用 Keras 提供的代码。这是代码:
def precision(y_true, y_pred):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
predicted_positives = K.sum(K.round(K.clip(y_pred, 0, 1)))
precision = true_positives / (predicted_positives + K.epsilon())
return precision
def recall(y_true, y_pred):
true_positives = K.sum(K.round(K.clip(y_true * y_pred, 0, 1)))
possible_positives = K.sum(K.round(K.clip(y_true, 0, 1)))
recall = true_positives / (possible_positives + K.epsilon())
return recall
def fbeta_score(y_true, y_pred, beta=1):
if beta < 0:
raise ValueError('The lowest choosable beta is zero (only precision).')
# If there are no true positives, fix the F score at 0 like sklearn.
if K.sum(K.round(K.clip(y_true, 0, 1))) == 0:
return 0
p = precision(y_true, y_pred)
r = recall(y_true, y_pred)
bb = beta ** 2
fbeta_score = (1 + bb) * (p * r) / (bb * p + r + K.epsilon())
return fbeta_score
def fmeasure(y_true, y_pred):
return fbeta_score(y_true, y_pred, beta=1)
据我所见(我是这方面的业余爱好者),他们似乎使用了正确的公式。但是,当我尝试将其用作训练过程中的指标时,我得到了 val_accuracy、val_precision、val_recall 和 val_fmeasure 完全相同的输出。我相信即使公式正确也可能会发生,但我相信这不太可能。这个问题有什么解释吗?谢谢
【问题讨论】:
-
输出值是否相同为零?
-
您能否提供完整代码 - 与
fit和compile通话?您能否提供有关您的数据的更多详细信息? -
这是 Keras 中的一个已知问题(请参阅:github.com/fchollet/keras/issues/5400)。精度、Rcall 和 F1-Score 正在以批量方式估算。
-
标签有2个类别,0和1。我使用categorical_crossentropy,最后一个Dense层使用softmax激活函数。我尝试更改代码以使用 binary_crossentropy 和使用 relu 的最后一个 Dense 层,并且精度等工作正常。我认为这是因为该函数不能应用于张量形状的数据。有什么建议吗?
标签: keras