Ricerca per categorie valutare i modelli in Python
- Valutare una rete convoluzionale salvata
- Estrarre le funzionalità da un livello specifico usando un modello sottoposto a training
Valutare una rete convoluzionale salvata
Esistono alcuni aspetti da considerare con i modelli sottoposti a training sulle immagini. A questo punto le trasformazioni non fanno parte del modello, quindi la sottrazione della media deve essere eseguita manualmente. Un altro problema è che PIL carica le immagini in un ordine diverso rispetto a quello usato durante il training e che è necessario un aggiornamento.
Supponendo che:
- durante il training hai sottratto 128 da tutti i canali
- l'immagine su cui si vuole eseguire la stima è "foo.jpg"
- il modello è stato salvato in Python usando
z.save("mycnn.dnn")
quindi è possibile eseguire le operazioni seguenti:
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)
Se si carica un modello precedente sottoposto a training da NDL o BrainScript, sarà necessario trovare il nodo di output del modello come indicato di seguito:
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.
...
Ci interessa solo 'z_output' con indice 2. Per ottenere l'output del modello reale, eseguire le operazioni seguenti:
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)
Il motivo è che nel modello precedente le informazioni di training vengono salvate oltre ai parametri del modello effettivi.
Estrarre le funzionalità da un livello specifico usando un modello sottoposto a training?
Ecco un esempio.