Ich konnte das Modell mit Tensorflow, PyTorch und Chainer bewerten, aber wäre es nicht möglich, Personen, die mit Deep Learning nicht vertraut sind, nur die Genauigkeits- und Verlustdiagramme anzuzeigen? Auch dieses Bild ist schnell die richtige Antwort! Das ist falsch! Es wird einige Szenen geben, in denen Sie sich freuen werden, das zu sehen. Um diesen Wunsch zu erfüllen, möchte ich mit Matplotlib feststellen, dass das Urteilsergebnis auf mehreren nebeneinander liegenden Bildern veröffentlicht wird.
"--- Ein glücklicher Junge. Dein Wunsch wird endlich wahr."
Auch dieses Mal werden wir Tensorflow als Beispiel verwenden, aber der Anzeigeteil des Bildes kann ein beliebiges Framework sein.
Als Beispiel habe ich ein Modell vorbereitet, das MNIST mit Tensorflow trainiert. Dieses Mal werden 40 Bilder verwendet.
validation.py
from matplotlib import pyplot as plt
import numpy as np
import tensorflow as tf
#Einstellen der Anzahl der Anzeigebilder
row = 4
col = 10
#Lade Daten
mnist = tf.keras.datasets.mnist
(_, _), (x_test, y_test) = mnist.load_data()
x_test = np.asarray(x_test[0:row*col])
y_test = np.asarray(y_test[0:row*col])
#Modell laden
path = 'mnist.h5' #Geschulter Modellpfad
model = tf.keras.models.load_model(path)
#Inferenz
x_test_flat = x_test.reshape(-1, 784) / 255.0
result = model.predict(x_test_flat)
#Bildausrichtung
plt.figure(figsize=(5, 5))
image_array = []
for i, image in enumerate(x_test):
image_array.append(plt.subplot(row, col, i + 1))
plt.axis('off')
plt.imshow(image, cmap='gray')
plt.pause(0.1)
#Etikettenplatzierung
for j, image in enumerate(x_test):
bg_color = 'skyblue' if y_test[j] == np.argmax(result[j]) else 'red'
image_array[j].text(0, 0, np.argmax(result[j]), color='black', backgroundcolor=bg_color)
plt.pause(0.1)
#Speichern Sie das gesamte Bild
plt.savefig('judge_result.png')
Es wird an verschiedenen Stellen geschrieben, bis ein Diagramm der Erkennungsrate gelernt und ausgewertet und ausgegeben wird. Es ist jedoch überraschend selten, dass es eine Beschreibung gibt, mit dem gelernten Modell auf etwas zu schließen. (Obwohl es meine eigene Erfahrung ist ...)
x_test_flat = x_test.reshape(-1, 784) / 255.0
result = model.predict(x_test_flat)
tensorflow.keras.models
hat eine Methode namens Predict ()
, die zur Inferenz verwendet wird.
Übergeben Sie dieser Methode ein Array von Bildern, auf die Sie schließen möchten. Da die Eingabe des Modells eindimensional ist, habe ich es in ein eindimensionales Array mit "Umformung (-1, 784)" konvertiert.
Da wir dieses Mal jeweils 40 Blatt verarbeiten, übergeben wir ein Array von "(40, 784)", aber selbst wenn wir nur ein Blatt verarbeiten, müssen wir es als "(1, 784)" übergeben.
In Chainer ist es möglich (sollte), durch Schreiben von result = model.predictor (test_x) .data [0]
abgeleitet zu werden.
Mit matplotlib können Sie objektorientiert schreiben.
plt.figure(figsize=(5, 5))
image_array = []
for i, image in enumerate(x_test):
image_array.append(plt.subplot(row, col, i + 1))
plt.axis('off')
plt.imshow(image, cmap='gray')
plt.pause(0.05)
Verwenden Sie in der ersten for-Anweisung plt.subplot
, um die Bilder anzuordnen.
plt.subplot
ist ein untergeordnetes Element von figure
. Übergeben Sie (vertikal, horizontal, Zahl) als Argument.
Die Zahl, die die Zahl darstellt, wird von 1 gezählt. (Beachten Sie, dass es nicht von 0 ist)
Zeigen Sie zuerst alle Bilder an und fügen Sie dann den untergeordneten Elementen Beschriftungen hinzu. Fügen Sie also "append ()" hinzu, damit Sie sie bedienen können.
(Wenn Sie es nur anzeigen möchten, müssen Sie es nicht in das Array einfügen, aber ich möchte später eine Beschriftung hinzufügen, also mache ich es diesmal so.)
Da es sich diesmal um ein Bild und nicht um ein Diagramm handelt, wird die Anzeige der Koordinaten mit "plt.axis (" off ")" deaktiviert.
Wenn Sie die sofort anzuordnenden Bilder vorbereitet haben, zeigen Sie die Bilder mit plt.pause ()
an.
Wenn Sie es auf "plt.show ()" setzen, wird der Prozess dort gestoppt, daher verwende ich "plt.pause ()".
for j, image in enumerate(x_test):
bg_color = 'skyblue' if y_test[j] == np.argmax(result[j]) else 'red'
image_array[j].text(0, 0, np.argmax(result[j]), color='black', backgroundcolor=bg_color)
plt.pause(0.05)
Die zweite for-Anweisung fügt den Elementen von image_array
nacheinander Beschriftungen hinzu.
Fügen Sie das Inferenzergebnis mit "image_array [j] .text (0, 0, np.argmax (result [j])" zum Bild hinzu.
Wenn das Inferenzergebnis "np.argmax (Ergebnis [j])" und die korrekte Antwortbezeichnung "y_test [j]" übereinstimmen, ist der Hintergrund blau, und wenn sie nicht übereinstimmen, ist der Hintergrund rot.
Zeigen Sie die Beschriftung mit plt.pause ()
auf dem Bildschirm an. Das Argument ist die Zeit zum Anzeigen des Bildes. Durch Ändern dieses Werts wird die Aktualisierungsgeschwindigkeit der Anzeige geändert. Bitte beachten Sie, dass dies die Aktualisierungsgeschwindigkeit von "Anzeige" ist, nicht die Verarbeitungsgeschwindigkeit des Modells.
Ich habe dieses Mal erstellt, wollte es aber in der Präsentation des Schülerexperiments verwenden, konnte es aber zu diesem Zeitpunkt nicht implementieren ... Es ist jetzt leicht, darüber nachzudenken, aber es kann je nach Lernphase schwierig sein. Ich hoffe, es erreicht Leute, die gerade mit Deep Learning begonnen haben oder Programmiervorträge gehalten haben, es aber nicht mögen und es nicht sehr gut verstehen.
Recommended Posts