我有一个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])
我认为这仅适用于二进制分类,因此,如果不能将其用于多标签分类,请问您需要什么帮助?
答案 0 :(得分:0)
,因为您的最终输出可以有4个标签。在model.compile部分更改
中 loss='binary_crossentropy'
至loss='categorical_crossentropy'
,并且在神经网络体系结构的最后一层中,将激活函数更改为'softmax'
',还应更改输出神经元的数量。
其他变化(如输入形状)将取决于您提供给模型的数据。
请参阅此博客以了解有关CNN的更多信息。
请参阅此博客以了解有关如何为深度学习模型计算精度,召回率,F1等的更多信息