3 回答

TA贡献1829条经验 获得超7个赞
我正在添加另一个答案,因为这是在测试集上正确计算这些指标的最干净方法(截至2020年3月22日)。
您需要做的第一件事是创建自定义回调,在其中发送测试数据:
import tensorflow as tf
from tensorflow.keras.callbacks import Callback
from sklearn.metrics import classification_report
class MetricsCallback(Callback):
def __init__(self, test_data, y_true):
# Should be the label encoding of your classes
self.y_true = y_true
self.test_data = test_data
def on_epoch_end(self, epoch, logs=None):
# Here we get the probabilities
y_pred = self.model.predict(self.test_data))
# Here we get the actual classes
y_pred = tf.argmax(y_pred,axis=1)
# Actual dictionary
report_dictionary = classification_report(self.y_true, y_pred, output_dict = True)
# Only printing the report
print(classification_report(self.y_true,y_pred,output_dict=False)
在主节点中,加载数据集并添加回调的位置:
metrics_callback = MetricsCallback(test_data = my_test_data, y_true = my_y_true)
...
...
#train the model
model.fit(x_train, y_train, callbacks = [cp_callback, metrics_callback,tensorboard], epochs=5)

TA贡献1951条经验 获得超3个赞
从TensorFlow 2.X开始,两者都可作为内置指标使用。precision
recall
因此,您不需要手动实现它们。除此之外,它们之前在Keras 2.X版本中被删除,因为它们具有误导性---因为它们是以批处理方式计算的,精度和召回率的全局(真实)值实际上会有所不同。
你可以看看这里:https://www.tensorflow.org/api_docs/python/tf/keras/metrics/Recall
现在,他们有一个内置的累加器,可确保正确计算这些指标。
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy',tf.keras.metrics.Precision(),tf.keras.metrics.Recall()])
添加回答
举报