Comment faire évaluer des modèles dans Python
- Évaluer un réseau convolutionnel enregistré
- Extraire des fonctionnalités d’une couche spécifique à l’aide d’un modèle entraîné
Évaluer un réseau convolutionnel enregistré
Il existe quelques éléments à prendre en compte avec des modèles entraînés sur des images. À ce stade, les transformations ne font pas partie du modèle, de sorte que la soustraction de la moyenne doit être effectuée manuellement. Un autre problème est que PIL charge des images dans un ordre différent de celui utilisé lors de l’entraînement et qu’une transcription est nécessaire.
En supposant que :
- pendant l’entraînement, vous avez soustracté 128 de tous les canaux
- l’image sur laquelle vous souhaitez prédire est « foo.jpg »
- vous avez enregistré votre modèle dans Python à l’aide de
z.save("mycnn.dnn")
vous pouvez ensuite effectuer les opérations suivantes :
from cntk.ops.functions import load_model
from PIL import Image
import numpy as np
z = load_model("mycnn.dnn")
rgb_image = np.asarray(Image.open("foo.jpg"), dtype=np.float32) - 128
bgr_image = rgb_image[..., [2, 1, 0]]
pic = np.ascontiguousarray(np.rollaxis(bgr_image, 2))
predictions = np.squeeze(z.eval({z.arguments[0]:[pic]}))
top_class = np.argmax(predictions)
Si vous chargez un ancien modèle entraîné par NDL ou BrainScript, vous devez trouver le nœud de sortie du modèle comme suit :
for index in range(len(z.outputs)):
print("Index {} for output: {}.".format(index, z.outputs[index].name))
...
Index 0 for output: CE_output.
Index 1 for output: Err_output.
Index 2 for output: OutputNodes.z_output.
...
Nous nous soucions uniquement de « z_output » qui a l’index 2. Ainsi, pour obtenir la sortie du modèle réel, procédez comme suit
import cntk
z_out = cntk.combine([z.outputs[2].owner])
predictions = np.squeeze(z_out.eval({z_out.arguments[0]:[pic]}))
top_class = np.argmax(predictions)
La raison de ce qui précède est que dans l’ancien modèle, les informations d’entraînement sont enregistrées en plus des paramètres réels du modèle.
Extraire des fonctionnalités d’une couche spécifique à l’aide d’un modèle entraîné ?
Voici un exemple.