Keras如何定义“accuracy”和“loss”?

43

我找不到Keras如何定义“准确性”和“损失”。我知道我可以指定不同的度量指标(例如,均方误差,交叉熵),但Keras打印出一个标准的“准确性”。它是如何定义的?同样的对于损失;我知道我可以指定不同类型的正则化;它们是否包含在损失中?

理想情况下,我想打印出用于定义它的方程;如果不行,我将接受这里的答案。

2个回答

35
请查看metrics.py,您可以在其中找到所有可用指标的定义,包括不同类型的准确度。仅当您将其添加到所需指标列表中并编译模型时,才会打印准确度。
正则化器根据定义添加到损失中。例如,请参见Layer类的add_loss方法。 更新 accuracy的类型是根据目标函数确定的,请参见training.py。默认选择是categorical_accuracy。当目标函数为二进制或稀疏时,选择其他类型,如binary_accuracysparse_categorical_accuracy

4
如果我添加到指标 'accuracy' 中,那么是哪个度量标准?在 metrics.py 中有几个词中带有 "accuracy" 这个词? - SRobertJames
1
感谢。但是如果目标函数既不是 binary_crossentropy 也不是 categorical_crossentropy,而是 mse,那么选择什么?在那种情况下,accuracy 是什么意思? - SRobertJames
1
在这种情况下,选择categorical_accuracy,根据文档的解释,它意味着“计算多类分类问题所有预测的平均准确率”。如果您的问题不是分类问题,则包括准确性就没有太多意义。@SRobertJames - Sergii Gryshkevych
@SergiiGryshkevych 我点击了 categorical_accuracy 的链接。如果我没记错的话,categorical_accuracy 现在不再是标量,而是一个数组。categorical_accuracy - Xiaohong Deng

1
自从Sergii的回答以来,Keras库已经进行了相当大的清理,现在源代码非常易读。指标定义在`tensorflow.keras.metrics`中(其文档可以在这里找到),损失函数定义在`tensorflow.keras.losses`中(文档在这里)。指标模块与损失函数模块有一些重叠,但这是可以预期的,因为特定的损失函数也可以作为指标进行跟踪。
此外,如果我们检查源代码,除非度量标准是准确性,否则会调用get()方法来获取特定的度量函数,即tf.keras.metrics.get('binary_accuracy')。另一方面,总是调用get()方法来获取特定的损失函数。

而且,准确性的类型根据目标类型选择(例如binary_accuracycategorical_accuracy等)。

可以通过调用模块的dir()打印所有指标/损失。

metrics_list = [m for m in dir(tf.keras.metrics) if not m.startswith('_')]

losses_list = [m for m in dir(tf.keras.losses) if not m.startswith('_')]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接