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()