我使用Keras(2.1.5)中的TensorFlow后端训练了神经网络,我还使用了keras-contrib(2.0.8)库来添加CRF层作为网络的输出。 / p>
我想知道在使用NN对测试集进行预测后,如何获得每个类的精度,回忆和f1分数。
答案 0 :(得分:3)
假设您有一个函数get_model()
,它可以构建您训练过的完全相同的模型,并且路径weights_path
指向包含模型权重的HDF5文件:
model = get_model()
model.load_weights(weights_path)
这应该正确加载您的模型。然后,您只需定义测试数据的ImageDataGenerator
并拟合模型以获得预测:
# Path to your folder testing data
testing_folder = ""
# Image size (set up the image size used for training)
img_size = 256
# Batch size (you should tune it based on your memory)
batch_size = 16
val_datagen = ImageDataGenerator(
rescale=1. / 255)
validation_generator = val_datagen.flow_from_directory(
testing_folder,
target_size=(img_size, img_size),
batch_size=batch_size,
shuffle=False,
class_mode='categorical')
然后,您可以使用model.predict_generator()
方法使模型生成整个数据集的所有预测:
# Number of steps corresponding to an epoch
steps = 100
predictions = model.predict_generator(validation_generator, steps=steps)
最后使用metrics.confusion_matrix()
包中的sklearn
方法创建一个混淆矩阵:
val_preds = np.argmax(predictions, axis=-1)
val_trues = validation_generator.classes
cm = metrics.confusion_matrix(val_trues, val_preds)
或者使用metrics.precision_recall_fscore_support()
中的sklearn
方法获取所有类的所有精度,回忆和f1分数(参数average=None
输出所有类的指标):
# label names
labels = validation_generator.class_indices.keys()
precisions, recall, f1_score, _ = metrics.precision_recall_fscore_support(val_trues, val_preds, labels=labels)
我没有测试过,但我猜这会对你有帮助。
答案 1 :(得分:0)
查看sklearn.metrics.classification_report
:
function translateString(input) {
return input.replace(/\.(\d{1,2}).*$/, '.$1');
}
console.log(translateString('14,12.1545'));
console.log(translateString('14,12.1'));
console.log(translateString('14,12.154534534534'));
给你类似
的东西from sklearn.metrics import classification_report
y_pred = model.predict(x_test)
print(classification_report(y_true, y_pred))