计算Keras CNN模型的指标

时间:2020-06-14 13:05:14

标签: python tensorflow machine-learning deep-learning computer-vision

我有一个CNN模型,该模型可以识别总共4种姿势中的人类姿势,我将通过计算指标召回率,精度,fmeasure和准确性来测试模型的性能。默认情况下,准确性是在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 f1(y_true, y_pred):

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 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
precision = precision(y_true, y_pred)
recall = recall(y_true, y_pred)
return 2*((precision*recall)/(precision+recall+K.epsilon()))

model.compile(loss='binary_crossentropy',
          optimizer= "adam",
          metrics=[mcor,recall, f1])

我认为这仅适用于二进制分类,因此,如果不能将其用于多标签分类,请问您需要什么帮助?

1 个答案:

答案 0 :(得分:0)

,因为您的最终输出可以有4个标签。在model.compile部分更改

loss='binary_crossentropy'loss='categorical_crossentropy'

,并且在神经网络体系结构的最后一层中,将激活函数更改为'softmax'',还应更改输出神经元的数量。 其他变化(如输入形状)将取决于您提供给模型的数据。

请参阅此博客以了解有关CNN的更多信息。

https://towardsdatascience.com/convolutional-neural-networks-for-beginners-practical-guide-with-python-and-keras-dc688ea90dca

请参阅此博客以了解有关如何为深度学习模型计算精度,召回率,F1等的更多信息

https://machinelearningmastery.com/how-to-calculate-precision-recall-f1-and-more-for-deep-learning-models/