web-dev-qa-db-fra.com

Quelles sont les valeurs renvoyées par model.evaluate () dans Keras?

J'ai plusieurs sorties de mon modèle à partir de plusieurs couches denses. Mon modèle a 'accuracy' comme seule mesure dans la compilation. Je voudrais savoir la perte et la précision pour chaque sortie. Ceci est une partie de mon code.

scores = model.evaluate(X_test, [y_test_one, y_test_two], verbose=1)

Quand j'ai imprimé les partitions, voici le résultat.

[0.7185557290413819, 0.3189622712272771, 0.39959345855771927, 0.8470299135229717, 0.8016634374641469]

Que représentent ces chiffres?

Je suis nouveau à Keras et cela pourrait être une question triviale. Cependant, j'ai lu les docs de Keras mais je ne suis toujours pas sûr.

24
GGG

Cité de evaluate() documentation de la méthode :

Retourne

Perte de test scalaire (si le modèle ne comporte qu'une seule sortie et aucune métrique) ou liste de scalaires (si le modèle comporte plusieurs sorties et/ou métriques). L'attribut model.metrics_names vous donnera les étiquettes d'affichage pour les sorties scalaires.

Par conséquent, vous pouvez utiliser la propriété metrics_names de votre modèle pour savoir à quoi correspond chacune de ces valeurs. Par exemple:

from keras import layers
from keras import models
import numpy as np

input_data = layers.Input(shape=(100,)) 
out_1 = layers.Dense(1)(input_data)
out_2 = layers.Dense(1)(input_data)

model = models.Model(input_data, [out_1, out_2])
model.compile(loss='mse', optimizer='adam', metrics=['mae'])

print(model.metrics_names)

affiche les éléments suivants:

['loss', 'dense_1_loss', 'dense_2_loss', 'dense_1_mean_absolute_error', 'dense_2_mean_absolute_error']

qui indique à chacun de ces nombres que vous voyez dans la sortie de la méthode evaluate.

De plus, si vous avez plusieurs couches, ces noms dense_1 et dense_2 pourraient être un peu ambigus. Pour résoudre cette ambiguïté, vous pouvez attribuer des noms à vos calques à l'aide de l'argument name des calques (pas nécessairement sur tous les calques, mais uniquement sur les calques d'entrée et de sortie):

# ...
out_1 = layers.Dense(1, name='output_1')(input_data)
out_2 = layers.Dense(1, name='output_2')(input_data)
# ...

print(model.metrics_names)

qui fournit une description plus claire:

['loss', 'output_1_loss', 'output_2_loss', 'output_1_mean_absolute_error', 'output_2_mean_absolute_error']
27
today