【问题标题】:Add other metrics to compute performance添加其他指标以计算性能
【发布时间】:2020-12-25 11:50:56
【问题描述】:

我使用 TFF 版本 0.12.0 为了计算模型的性能,我想添加(准确的)敏感性和特异性指标,

def specificity
...
def create_compiled_keras_model():
    ....

    model.compile(optimizer=tf.keras.optimizers.SGD(lr=0.001, momentum =0.9), 
             loss=tf.keras.losses.BinaryCrossentropy(),
              metrics=([tf.keras.metrics.BinaryAccuracy()], sensitivity, specificity))
    return model

我发现了这个错误:

TypeError: Type of `metrics` argument not understood. Expected a list or dictionary, found: ([<tensorflow.python.keras.metrics.BinaryAccuracy object at 0x7fb5b0711748>], <function sensitivity at 0x7fb6adf45e18>, <function specificity at 0x7fb5fdaf5f28>)

那么我怎样才能在 Tensorflow federated 中添加指标 谢谢

【问题讨论】:

    标签: tensorflow tensorflow2.0 tensorflow-federated


    【解决方案1】:

    TFF 需要使用 tf.keras.metrics.Metric 接口实现指标,并且不能包装任意 Python 函数。

    可以在https://github.com/tensorflow/federated/blob/3ed93c8036501fe327ede249a4b0f20d02c6f476/tensorflow_federated/python/learning/keras_utils_test.py#L33 中找到基于tf.keras.metrics.Sum 子类制作自定义指标的示例。关键是update_state方法的实现。

    对于敏感性和特异性指标,查看tf.keras.metrics.SensitivityAtSpecificity 的实现及其基类tf.keras.metrics.SensitivitySpecificityBase 可能是有用的示例。

    【讨论】:

    • 感谢@Zachary 的回答。这些指标仅适用于二元类模式数据集吗?如果我有超过 2 个类的数据集,我可以使用这些指标吗?
    • 我认为这些指标不适用于非二进制预测。是否可以为每个标签创建一个指标?例如对于预测,获取每个标签 K 并计算 Knot-K 并测量模型性能?
    • 我在写 :`metrics=[tf.keras.metrics.SpecificityAtSensitivity()]) 时发现了这个 :TypeError: __init__() missing 1 required positional argument: 'specificity')
    • 是的,构造函数似乎需要一个额外的参数来构造,文档在这里:tensorflow.org/api_docs/python/tf/keras/metrics/…。但是,答案将它们作为如何子类化的示例,从指标是否直接适用的问题中不清楚。
    猜你喜欢
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    • 2018-05-12
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多