计算Keras CNN模型的指标

问题描述 投票:1回答:1

我有一个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])

我认为这仅适用于二进制分类,因此,如果不能将其用于多标签分类,请使用我的方法是什么?

python tensorflow machine-learning deep-learning computer-vision
1个回答
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/

© www.soinside.com 2019 - 2024. All rights reserved.