keras/keras_core/metrics/__init__.py

174 lines
6.0 KiB
Python
Raw Normal View History

2023-04-16 19:21:29 +00:00
from keras_core.api_export import keras_core_export
2023-05-02 16:00:30 +00:00
from keras_core.metrics.accuracy_metrics import Accuracy
from keras_core.metrics.accuracy_metrics import BinaryAccuracy
from keras_core.metrics.accuracy_metrics import CategoricalAccuracy
from keras_core.metrics.accuracy_metrics import SparseCategoricalAccuracy
from keras_core.metrics.accuracy_metrics import SparseTopKCategoricalAccuracy
from keras_core.metrics.accuracy_metrics import TopKCategoricalAccuracy
from keras_core.metrics.confusion_metrics import AUC
from keras_core.metrics.confusion_metrics import FalseNegatives
from keras_core.metrics.confusion_metrics import FalsePositives
from keras_core.metrics.confusion_metrics import Precision
from keras_core.metrics.confusion_metrics import PrecisionAtRecall
from keras_core.metrics.confusion_metrics import Recall
from keras_core.metrics.confusion_metrics import RecallAtPrecision
from keras_core.metrics.confusion_metrics import SensitivityAtSpecificity
from keras_core.metrics.confusion_metrics import SpecificityAtSensitivity
from keras_core.metrics.confusion_metrics import TrueNegatives
from keras_core.metrics.confusion_metrics import TruePositives
from keras_core.metrics.f_score_metrics import F1Score
from keras_core.metrics.f_score_metrics import FBetaScore
2023-04-26 05:44:19 +00:00
from keras_core.metrics.hinge_metrics import CategoricalHinge
from keras_core.metrics.hinge_metrics import Hinge
from keras_core.metrics.hinge_metrics import SquaredHinge
2023-04-16 19:21:29 +00:00
from keras_core.metrics.metric import Metric
2023-05-02 01:54:10 +00:00
from keras_core.metrics.probabilistic_metrics import BinaryCrossentropy
from keras_core.metrics.probabilistic_metrics import CategoricalCrossentropy
from keras_core.metrics.probabilistic_metrics import KLDivergence
from keras_core.metrics.probabilistic_metrics import Poisson
2023-05-02 01:54:10 +00:00
from keras_core.metrics.probabilistic_metrics import (
SparseCategoricalCrossentropy,
)
2023-04-18 00:23:53 +00:00
from keras_core.metrics.reduction_metrics import Mean
from keras_core.metrics.reduction_metrics import MeanMetricWrapper
2023-04-18 21:49:38 +00:00
from keras_core.metrics.reduction_metrics import Sum
from keras_core.metrics.regression_metrics import CosineSimilarity
from keras_core.metrics.regression_metrics import LogCoshError
from keras_core.metrics.regression_metrics import MeanAbsoluteError
from keras_core.metrics.regression_metrics import MeanAbsolutePercentageError
2023-04-18 21:49:38 +00:00
from keras_core.metrics.regression_metrics import MeanSquaredError
from keras_core.metrics.regression_metrics import MeanSquaredLogarithmicError
from keras_core.metrics.regression_metrics import R2Score
from keras_core.metrics.regression_metrics import RootMeanSquaredError
2023-04-26 05:44:19 +00:00
from keras_core.saving import serialization_lib
2023-04-16 19:21:29 +00:00
2023-04-26 05:15:01 +00:00
ALL_OBJECTS = {
2023-05-02 02:03:04 +00:00
# Base
2023-04-26 05:15:01 +00:00
Metric,
Mean,
Sum,
MeanMetricWrapper,
2023-05-02 02:03:04 +00:00
# Regression
MeanSquaredError,
RootMeanSquaredError,
MeanAbsoluteError,
MeanAbsolutePercentageError,
MeanSquaredLogarithmicError,
CosineSimilarity,
LogCoshError,
R2Score,
2023-05-02 02:03:04 +00:00
# Classification
AUC,
2023-05-02 02:03:04 +00:00
FalseNegatives,
2023-04-26 05:15:01 +00:00
FalsePositives,
2023-05-02 02:03:04 +00:00
Precision,
PrecisionAtRecall,
Recall,
RecallAtPrecision,
SensitivityAtSpecificity,
SpecificityAtSensitivity,
2023-05-02 02:03:04 +00:00
TrueNegatives,
TruePositives,
# Hinge
2023-04-26 05:15:01 +00:00
Hinge,
SquaredHinge,
CategoricalHinge,
2023-05-02 02:03:04 +00:00
# Probabilistic
KLDivergence,
Poisson,
2023-05-02 01:54:10 +00:00
BinaryCrossentropy,
CategoricalCrossentropy,
SparseCategoricalCrossentropy,
2023-05-02 02:03:04 +00:00
# Accuracy
Accuracy,
BinaryAccuracy,
CategoricalAccuracy,
SparseCategoricalAccuracy,
TopKCategoricalAccuracy,
SparseTopKCategoricalAccuracy,
# F-Score
F1Score,
FBetaScore,
2023-04-26 05:15:01 +00:00
}
2023-04-26 05:44:19 +00:00
ALL_OBJECTS_DICT = {cls.__name__: cls for cls in ALL_OBJECTS}
ALL_OBJECTS_DICT.update(
{
2023-05-02 02:03:04 +00:00
"mse": MeanSquaredError,
"MSE": MeanSquaredError,
2023-04-26 05:44:19 +00:00
}
)
2023-04-26 05:15:01 +00:00
@keras_core_export("keras_core.metrics.serialize")
def serialize(metric):
"""Serializes metric function or `Metric` instance.
Args:
metric: A Keras `Metric` instance or a metric function.
Returns:
Metric configuration dictionary.
"""
return serialization_lib.serialize_keras_object(metric)
@keras_core_export("keras_core.metrics.deserialize")
def deserialize(config, custom_objects=None):
"""Deserializes a serialized metric class/function instance.
Args:
config: Metric configuration.
custom_objects: Optional dictionary mapping names (strings)
to custom objects (classes and functions) to be
considered during deserialization.
Returns:
A Keras `Metric` instance or a metric function.
"""
return serialization_lib.deserialize_keras_object(
config,
module_objects=ALL_OBJECTS_DICT,
custom_objects=custom_objects,
)
2023-04-16 19:21:29 +00:00
@keras_core_export("keras_core.metrics.get")
def get(identifier):
"""Retrieves a Keras metric as a `function`/`Metric` class instance.
The `identifier` may be the string name of a metric function or class.
>>> metric = metrics.get("categorical_crossentropy")
>>> type(metric)
<class 'function'>
>>> metric = metrics.get("CategoricalCrossentropy")
>>> type(metric)
<class '...metrics.CategoricalCrossentropy'>
You can also specify `config` of the metric to this function by passing dict
containing `class_name` and `config` as an identifier. Also note that the
`class_name` must map to a `Metric` class
>>> identifier = {"class_name": "CategoricalCrossentropy",
... "config": {"from_logits": True}}
>>> metric = metrics.get(identifier)
>>> type(metric)
<class '...metrics.CategoricalCrossentropy'>
Args:
identifier: A metric identifier. One of None or string name of a metric
function/class or metric configuration dictionary or a metric
function or a metric class instance
2023-04-16 19:21:29 +00:00
Returns:
A Keras metric as a `function`/ `Metric` class instance.
"""
if isinstance(identifier, dict):
return deserialize(identifier)
elif isinstance(identifier, str):
2023-04-26 05:15:01 +00:00
return deserialize(identifier)
2023-04-16 19:21:29 +00:00
elif callable(identifier):
return identifier
else:
2023-04-26 05:44:19 +00:00
raise ValueError(f"Could not interpret metric identifier: {identifier}")