Estoy construyendo un clasificador multiclase con Keras 2.02 (con backend de Tensorflow) y no sé cómo calcular la precisión y la recuperación en Keras. Por favor, ayúdame.
El paquete de Python keras-metrics 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()]) ACTUALIZACIÓN : a partir de la versión 2.3.0 de Keras , se proporcionan métricas como precisión, recuperación, etc. 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ás que implementarlos tú 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 eliminarlo aquí .
Se eliminaron las métricas porque eran por lotes, por lo que el valor puede o no ser correcto.
Mi respuesta se basa en el comentario del tema Keras GH . Calcula la precisión de validación y la recuperación en cada época para una tarea de clasificación codificada en caliente. También mire esta respuesta SO para ver cómo se puede hacer con la funcionalidad keras.backend .
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()