Saltar al contenido

Cómo calcular la precisión y la recuperación en Keras

Solución:

Keras-metrics del paquete Python podría ser útil para esto (soy el autor del paquete).

import keras
import keras_metrics

model = models.Sequential()
model.add(keras.layers.Dense(1, activation="sigmoid", input_dim=2))
model.add(keras.layers.Dense(1, activation="softmax"))

model.compile(optimizer="sgd",
              loss="binary_crossentropy",
              metrics=[keras_metrics.precision(), keras_metrics.recall()])

ACTUALIZAR: Empezando con Keras versión 2.3.0, métricas como precisión, recuperación, etc. se proporcionan dentro del paquete de distribución de la biblioteca.

El uso es el siguiente:

model.compile(optimizer="sgd",
              loss="binary_crossentropy",
              metrics=[keras.metrics.Precision(), keras.metrics.Recall()])

A partir de Keras 2.0, la precisión y la recuperación se eliminaron de la rama maestra. Tendrá que implementarlos usted mismo. Siga esta guía para crear métricas personalizadas: Aquí.

La ecuación de precisión y recuperación se puede encontrar aquí

O reutilice el código de keras antes de que se elimine aquí.

Se eliminaron las métricas porque eran por lotes, por lo que el valor puede ser correcto o no.

Mi respuesta se basa en el comentario de la cuestión de Keras GH. Calcula la precisión de validación y la recuperación en cada época para una tarea de clasificación con codificación única. También mire esta respuesta SO para ver cómo se puede hacer con keras.backend funcionalidad.

import keras as keras
import numpy as np
from keras.optimizers import SGD
from sklearn.metrics import precision_score, recall_score

model = keras.models.Sequential()
# ...
sgd = SGD(lr=0.001, momentum=0.9)
model.compile(optimizer=sgd, loss="categorical_crossentropy", metrics=['accuracy'])


class Metrics(keras.callbacks.Callback):
    def on_train_begin(self, logs={}):
        self._data = []

    def on_epoch_end(self, batch, logs={}):
        X_val, y_val = self.validation_data[0], self.validation_data[1]
        y_predict = np.asarray(model.predict(X_val))

        y_val = np.argmax(y_val, axis=1)
        y_predict = np.argmax(y_predict, axis=1)

        self._data.append({
            'val_recall': recall_score(y_val, y_predict),
            'val_precision': precision_score(y_val, y_predict),
        })
        return

    def get_data(self):
        return self._data


metrics = Metrics()
history = model.fit(X_train, y_train, epochs=100, validation_data=(X_val, y_val), callbacks=[metrics])
metrics.get_data()
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *