Freigeben über


Gewusst wie Auswerten von Modellen in Python

Auswerten eines gespeicherten konvolutionalen Netzwerks

Es gibt ein paar Dinge, die mit Modellen berücksichtigt werden können, die auf Bildern trainiert wurden. An diesem Punkt sind die Transformationen nicht Teil des Modells, sodass das Subtrahieren des Mittelwerts manuell erfolgen muss. Ein weiteres Problem besteht darin, dass PIL Bilder in einer anderen Reihenfolge lädt als das, was während der Schulung verwendet wurde und eine Umsetzung erforderlich ist.

Davon ausgehen:

  • Während der Schulung subtrahieren Sie 128 von allen Kanälen
  • das Bild, das Sie vorhersagen möchten, ist "foo.jpg"
  • Sie haben Ihr Modell unter Verwendung von Python gespeichert. z.save("mycnn.dnn")

Dann können Sie Folgendes ausführen:

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)

Wenn Sie ein altes Modell laden, das von NDL oder BrainScript trainiert wird, müssen Sie den Modellausgabeknoten wie folgt finden:

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.
...

Wir kümmern uns nur um "z_output", die Index 2 hat. Gehen Sie also wie folgt vor, um die reale Modellausgabe zu erhalten.

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)

Der Grund hierfür ist, dass im alten Modell zusätzlich zu den tatsächlichen Modellparametern die Schulungsinformationen gespeichert werden.

Extrahieren von Features aus einer bestimmten Ebene mithilfe eines trainierten Modells?

Hier ist ein Beispiel vorhanden.