54 votes

Quelles valeurs sont 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 le seul paramètre lors de la compilation. Je voudrais savoir la perte et de la précision pour chaque sortie. C'est une partie de mon code.

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

Lorsque j'ai imprimé les scores, c'est le résultat.

[0.7185557290413819, 0.3189622712272771, 0.39959345855771927, 0.8470299135229717, 0.8016634374641469]

Quels sont ces nombres représentent?

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

62voto

today Points 7336

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

Retourne

Scalaire test de perte (si le modèle a une seule sortie et pas de statistiques), ou liste des scalaires (si le modèle a plusieurs sorties et/ou des paramètres). L'attribut model.metrics_names vous donnera l'affichage des étiquettes pour le scalaire sorties.

Par conséquent, vous pouvez utiliser metrics_names de la propriété de votre modèle pour savoir ce que chacune de ces valeurs correspond à. 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)

les sorties suivantes:

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

ce qui indique que chacun de ces chiffres que vous voyez dans la sortie de l' evaluate méthode correspond à.

De plus, si vous avez de nombreuses couches, puis ceux - dense_1 et dense_2 des noms peut-être un peu ambiguë. Pour résoudre cette ambiguïté, vous pouvez attribuer des noms à vos couches à l'aide de name argument de couches (pas nécessairement sur eux tous, mais seulement sur l'entrée et la sortie des couches):

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

print(model.metrics_names)

ce qui génère une plus claire description:

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X