[PYTHON] Inferenz- und Ergebnisanzeige mit Tensorflow + matplotlib

1. Zuallererst

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." ezgif-5-fd49eded978e.gif

Auch dieses Mal werden wir Tensorflow als Beispiel verwenden, aber der Anzeigeteil des Bildes kann ein beliebiges Framework sein.

2. Implementierung und Erklärung

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')

Über das Denken

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.

Informationen zur Bildanzeige

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.

3. Zusammenfassung

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

Inferenz- und Ergebnisanzeige mit Tensorflow + matplotlib
Japanisches Diagramm mit VS Code + matplotlib anzeigen
Zeigen Sie Markierungen über dem Rand mit matplotlib an
[Jupyter Notebook Memo] Kanji mit Matplotlib anzeigen
Animation mit matplotlib
Japanisch mit Matplotlib
Animation mit matplotlib
Histogramm mit Matplotlib
Erstellen Sie eine Animation mit matplotlib
Zundokokiyoshi mit TensorFlow
Brechen Sie Blöcke mit Tensorflow
Ich möchte mehrere Bilder mit matplotlib anzeigen.
So zeigen Sie Bilder kontinuierlich mit matplotlib Memo an
2-Achsen-Plot mit Matplotlib
Daten mit TensorFlow lesen
Bootsrennen Vorhersage mit TensorFlow
Heatmap von Python + matplotlib
Banddiagramm mit Matplotlib
Lernen Sie mit Chemo Informatics Matplotlib
Echtzeitzeichnung mit Matplotlib
Verschiedene Farbleisten mit Matplotlib
3D-Plot mit Matplotlib
Zeigen Sie das Diagramm an, während Sie die Parameter mit PySimpleGUI + Matplotlib ändern
Taskleistenanzeige mit tqdm
Versuchen Sie eine Regression mit TensorFlow
Stellen Sie die Achsen mit matplotlib ein
[Python] Lesen Sie die CSV-Datei und zeigen Sie die Abbildung mit matplotlib an
Übersetzen Erste Schritte mit TensorFlow
Zeichnen Sie Excel-Daten mit matplotlib (1)
Versuchen Sie es mit TensorFlow
Japanische Anzeige von Matplotlib, Seaborn
Ungefähre Sinusfunktion mit TensorFlow
Versuchen Sie es mit matplotlib mit PyCharm
Diagrammzeichnungsmethode mit matplotlib
Zeichnen Sie Excel-Daten mit matplotlib (2)
Aktienkursprognose mit Tensorflow
Stapelbares Barplot mit Matplotlib
Echtzeit-Diagrammanzeige von matplotlib
[Python] Bayesianische Schätzung mit Pyro
Wählen Sie mit matplotlib abgestufte Farben aus
Animieren Sie mehrere Diagramme mit matplotlib
Versuchen Sie TensorFlow MNIST mit RNN
TensorFlow 2.X & TensorRT ist der erste Schritt, um die Inferenz zu beschleunigen
Zwei Möglichkeiten, mit matplotlib mehrere Grafiken in einem Bild anzuzeigen