Tensorflow 如何使用张量流一次计算准确度、召回率、f1分数、准确度和混淆矩阵
我曾尝试按如下方式计算这些指标,但我不确定是否所有这些指标都是一次性计算的 看起来这些指标都是通过单独运行模型计算的 注:“一次性”我指的是只测试一次模型,以计算所有这些指标 我有两个问题:Tensorflow 如何使用张量流一次计算准确度、召回率、f1分数、准确度和混淆矩阵,tensorflow,deep-learning,conv-neural-network,Tensorflow,Deep Learning,Conv Neural Network,我曾尝试按如下方式计算这些指标,但我不确定是否所有这些指标都是一次性计算的 看起来这些指标都是通过单独运行模型计算的 注:“一次性”我指的是只测试一次模型,以计算所有这些指标 我有两个问题: 首先,我想知道我是否正确计算了所有这些指标(不管是否有一个短的),如果没有,请在这里指出我的错误 如果这些指标计算正确,那么如何在短时间内计算它们 如何解释混淆矩阵输出 示例:这是使用CNN模型的分类问题。它们试图对符号信号(0、1、2、3、4、5)进行分类。班级总数为6人 代码: 对于多类分类,您可
对于多类分类,您可以遵循以下步骤
import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt
import numpy as np
from tensorflow.keras.callbacks import Callback
from sklearn.metrics import classification_report
(train_images, train_labels), (test_images, test_labels) = datasets.mnist.load_data()
train_images = train_images.reshape((60000, 28, 28, 1))
test_images = test_images.reshape((10000, 28, 28, 1))
train_images, test_images = train_images / 255.0, test_images / 255.0
model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
class MetricsCallback(Callback):
def __init__(self, test_data, y_true):
self.y_true = y_true
self.test_data = test_data
def on_epoch_end(self, epoch, logs=None):
y_pred = self.model.predict(self.test_data)
y_pred = tf.argmax(y_pred,axis=1)
report_dictionary = classification_report(self.y_true, y_pred, output_dict = True)
print(classification_report(self.y_true,y_pred,output_dict=False))
metrics_callback = MetricsCallback(test_data=test_images, y_true=test_labels)
model.fit(train_images,
train_labels,
epochs=1,
validation_data=(test_images, test_labels), callbacks=[metrics_callback])
输出:
59904/60000 [============================>.] - ETA: 0s - loss: 0.0049 - accuracy: 0.9984
precision recall f1-score support
0 1.00 1.00 1.00 980
1 0.99 1.00 1.00 1135
2 0.99 0.99 0.99 1032
3 0.99 1.00 0.99 1010
4 0.98 0.99 0.99 982
5 0.99 0.99 0.99 892
6 1.00 0.98 0.99 958
7 0.99 0.99 0.99 1028
8 0.99 0.99 0.99 974
9 0.99 0.98 0.99 1009
accuracy 0.99 10000
macro avg 0.99 0.99 0.99 10000
weighted avg 0.99 0.99 0.99 10000
对于二进制分类,您可以使用内置累加器,如下所示
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy',tf.keras.metrics.Precision(),tf.keras.metrics.Recall()])
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy',tf.keras.metrics.Precision(),tf.keras.metrics.Recall()])