SRobertJames
SRobertJames

Reputation: 9279

How does Keras define "accuracy" and "loss"?

I can't find how Keras defines "accuracy" and "loss". I know I can specify different metrics (e.g. mse, cross entropy) but Keras prints out a standard "accuracy". How is that defined? Likewise for loss; I know I can specify different types of regularization; are those in the loss?

Ideally, I'd like to print out the equation used to define it; if not, I'll settle for an answer here.

Upvotes: 44

Views: 41986

Answers (2)

cottontail
cottontail

Reputation: 23499

Since Sergii's answer, Keras library has been cleaned up quite a bit and the source code is pretty readable nowadays. The metrics are defined in tensorflow.keras.metrics (whose documentation can be found here) and the losses are defined in tensorflow.keras.losses (docs). There's a bit of overlap with the metrics module but that's expected given a particular loss function can also be tracked as a metric.

Also, if we inspect the source code, unless the metric is accuracy, get() method is called on the metrics module to get the particular metric function, i.e. tf.keras.metrics.get('binary_accuracy'). On the other hand, the get() method is always called to fetch the particular loss function.

Also, the type of accuracy is chosen depending on the the target type (binary_accuracy, categorical_accuracy etc.).

All metrics/losses can be printed calling dir() on the modules.

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('_')]

Upvotes: 1

Sergii Gryshkevych
Sergii Gryshkevych

Reputation: 4159

Have a look at metrics.py, there you can find definition of all available metrics including different types of accuracy. Accuracy is not printed unless you add it to the list of desired metrics when you compile your model.

Regularizers are by definition added to the loss. For example, see add_loss method of the Layerclass.

Update

The type of accuracy is determined based on the objective function, see training.py. The default choice is categorical_accuracy. Other types like binary_accuracy and sparse_categorical_accuracy are selected when the objective function is either binary or sparse.

Upvotes: 36

Related Questions