
Die Kenntnis des maschinellen Lernens und der TensorFlow-Bibliothek ähnelt den ersten Lektionen in einer Fahrschule. Wenn Sie unter parallelem Parken leiden, versuchen Sie, zum richtigen Zeitpunkt den Gang zu wechseln und die Spiegel nicht zu verwechseln. Erinnern Sie sich dabei verzweifelt an die Abfolge der Aktionen, während Ihr Fuß nervös auf den Gaspedalen zittert. Dies ist eine schwierige, aber notwendige Übung. Beim maschinellen Lernen: Bevor Sie moderne Gesichtserkennungssysteme oder Prognosealgorithmen an der Börse einsetzen, müssen Sie sich mit den entsprechenden Tools und Anweisungen befassen, um dann problemlos Ihre eigenen Systeme zu erstellen.
Anfänger im maschinellen Lernen werden die angewandte Ausrichtung dieses Buches zu schätzen wissen, da es darin besteht, die Grundlagen einzuführen und dann schnell echte Probleme zu lösen. Nach einer Überprüfung der Konzepte und Prinzipien des maschinellen Lernens bei der Arbeit mit TensorFlow werden Sie zu grundlegenden Algorithmen übergehen, neuronale Netze untersuchen und in der Lage sein, die Probleme der Klassifizierung, Clusterbildung, Regression und Prognose unabhängig zu lösen.
Auszug. Faltungsneurale Netze
Das Einkaufen in Geschäften nach einem anstrengenden Tag ist eine sehr beschwerliche Aufgabe. Meine Augen werden von zu vielen Informationen angegriffen. Verkäufe, Gutscheine, eine Vielzahl von Farben, kleine Kinder, flackernde Lichter und Gänge voller Menschen - dies sind nur einige Beispiele für alle Signale, die an den visuellen Kortex des Gehirns gesendet werden, unabhängig davon, ob ich darauf achten möchte oder nicht. Das visuelle System nimmt eine Fülle von Informationen auf.
Sicher kennen Sie den Satz "Es ist besser, einmal zu sehen als hundertmal zu hören." Dies mag für Sie und für mich (dh für Menschen) zutreffen, aber kann die Maschine in den Bildern einen Sinn finden? Unsere visuellen Fotorezeptoren wählen Wellenlängen des Lichts aus, aber diese Information erstreckt sich anscheinend nicht auf unser Bewusstsein. Am Ende kann ich nicht genau sagen, welche Wellenlängen des Lichts ich beobachte. Auf die gleiche Weise empfängt die Kamera Bildpixel. Wir möchten aber stattdessen etwas Höheres erhalten, zum Beispiel Namen oder Positionen von Objekten. Wie erhalten wir Informationen, die auf menschlicher Ebene wahrgenommen werden, aus Pixeln?
Um eine bestimmte Bedeutung aus den Quelldaten zu erhalten, muss ein neuronales Netzwerkmodell entworfen werden. In den vorherigen Kapiteln wurden verschiedene Arten von neuronalen Netzwerkmodellen vorgestellt, z. B. vollständig verbundene Modelle (Kapitel 8) und automatische Encoder (Kapitel 7). In diesem Kapitel werden wir einen anderen Modelltyp vorstellen, der als Convolutional Neural Network (CNN) bezeichnet wird. Dieses Modell eignet sich hervorragend für Bilder und andere sensorische Daten wie Ton. Beispielsweise kann das CNN-Modell zuverlässig klassifizieren, welches Objekt im Bild angezeigt wird.
Das CNN-Modell, das in diesem Kapitel behandelt wird, wird trainiert, um Bilder in eine von 10 möglichen Kategorien zu klassifizieren. In diesem Fall ist „ein Bild besser als nur ein Wort“, da wir nur 10 mögliche Optionen haben. Dies ist ein winziger Schritt in Richtung Wahrnehmung auf menschlicher Ebene, aber wir müssen mit etwas beginnen, oder?
9.1. Nachteile neuronaler Netze
Maschinelles Lernen ist ein ewiger Kampf um die Entwicklung eines Modells, das ausreichend aussagekräftig ist, um Daten zu präsentieren, aber gleichzeitig nicht so universell ist, dass es darum geht, Muster neu zu trainieren und auswendig zu lernen. Neuronale Netze werden angeboten, um die Ausdruckskraft zu erhöhen. obwohl sie, wie Sie sich vorstellen können, stark unter den Fallen der Umschulung leiden.
HINWEIS Eine Umschulung erfolgt, wenn ein trainiertes Modell in einem Trainingsdatensatz außergewöhnlich genau und in einem Validierungsdatensatz schlecht ist. Dieses Modell ist wahrscheinlich zu universell für die geringe Menge verfügbarer Daten und speichert am Ende nur die Trainingsdaten.
Um die Vielseitigkeit der beiden Modelle des maschinellen Lernens zu vergleichen, können Sie einen schnellen und groben heuristischen Algorithmus verwenden, um die Anzahl der Parameter zu berechnen, die als Ergebnis des Trainings ermittelt werden müssen. Wie in Abb. 9.1, ein vollständig verbundenes neuronales Netzwerk, das ein 256 × 256-Bild auf eine Schicht von 10 Neuronen abbildet, hat 256 × 256 × 10 = 655.360 Parameter! Vergleichen Sie es mit einem Modell, das nur fünf Parameter enthält. Es kann angenommen werden, dass ein vollständig verbundenes neuronales Netzwerk komplexere Daten enthält als ein Fünf-Parameter-Modell.
Im nächsten Abschnitt werden Faltungs-Neuronale Netze erörtert, die eine sinnvolle Möglichkeit darstellen, die Anzahl der Parameter zu verringern. Anstatt sich mit vollständig verbundenen Netzwerken zu befassen, verwendet CNN dieselben Parameter wiederholt.
9.2. Faltungsneurale Netze
Die Hauptidee, die Faltungs-Neuronalen Netzen zugrunde liegt, ist, dass das lokale Verständnis des Bildes ausreichend ist. Der praktische Vorteil von Faltungs-Neuronalen Netzen besteht darin, dass mit mehreren Parametern die Trainingszeit sowie die zum Trainieren des Modells erforderliche Datenmenge erheblich reduziert werden können.
Anstelle von vollständig verbundenen Netzwerken mit Gewichten von jedem Pixel verfügt CNN über eine ausreichende Anzahl von Gewichten, die zum Anzeigen eines kleinen Bildfragments erforderlich sind. Es ist, als würde man ein Buch mit einer Lupe lesen: Am Ende liest man die gesamte Seite, betrachtet aber zu jedem Zeitpunkt nur ein kleines Fragment davon.
Stellen Sie sich ein 256 × 256-Bild vor. Anstatt den TensorFlow-Code zu verwenden, der das gesamte Bild auf einmal verarbeitet, können Sie das Bild fragmentweise scannen, z. B. ein 5 × 5-Fenster. Ein 5 × 5-Fenster gleitet über das Bild (normalerweise von links nach rechts und von oben nach unten) in Abb. 9.2. Wie schnell es gleitet, nennt man Schrittlänge. Zum Beispiel bedeutet eine Schrittlänge von 2, dass ein 5 × 5-Schiebefenster jeweils 2 Pixel bewegt, bis das gesamte Bild passiert ist. In TensorFlow können Sie, wie in Kürze gezeigt wird, die Schrittlänge und Fenstergröße mithilfe der integrierten Funktionsbibliothek anpassen.
Diesem 5 × 5-Fenster ist eine 5 × 5-Gewichtsmatrix zugeordnet.
DEFINITION Eine Faltung ist eine gewichtete Summe der Intensitätswerte von Pixeln in einem Bild, wenn das Fenster das gesamte Bild durchläuft. Es stellt sich heraus, dass dieser Prozess der Faltung des Bildes mit der Gewichtsmatrix ein anderes Bild erzeugt (von derselben Größe, die von der Faltung abhängt). Koagulation ist der Prozess der Anwendung von Faltung.
Alle Manipulationen des Schiebefensters erfolgen in der Faltungsschicht des neuronalen Netzwerks. Ein typisches neuronales Faltungsnetzwerk weist mehrere Faltungsschichten auf. Jede Faltungsschicht erzeugt normalerweise viele zusätzliche Faltungen, daher ist die Gewichtungsmatrix ein 5 × 5 × n-Tensor, wobei n die Anzahl der Faltungen ist.
Lassen Sie das Bild beispielsweise eine Faltungsschicht mit einer Gewichtsmatrix von 5 × 5 × 64 Dimensionen durchlaufen. Dadurch werden 64 Faltungen mit einem 5 × 5-Schiebefenster erstellt. Daher weist das entsprechende Modell 5 × 5 × 64 = 1600 Parameter auf, was erheblich weniger als die Anzahl der Parameter eines vollständig verbundenen Netzwerks ist : 256 × 256 = 65.536.
Die Attraktivität von Faltungs-Neuronalen Netzen (CNNs) besteht darin, dass die Anzahl der vom Modell verwendeten Parameter nicht von der Größe des Originalbilds abhängt. Sie können dasselbe neuronale Faltungsnetzwerk auf 300 × 300 Bildern ausführen, und die Anzahl der Parameter in der Faltungsschicht ändert sich nicht!
9.3. Bildvorbereitung
Bereiten Sie einige Bilder vor, bevor Sie das CNN-Modell mit TensorFlow verwenden. Die Auflistungen in diesem Abschnitt helfen Ihnen beim Einrichten eines Trainingsdatensatzes für den Rest des Kapitels.
Laden Sie zunächst den CIFAR-10-
Datensatz von
www.cs.toronto.edu/~kriz/cifar-10-python.tar.gz herunter. Dieses Set enthält 60.000 Bilder, die gleichmäßig auf 10 Kategorien verteilt sind. Dies ist eine ziemlich große Ressource für Klassifizierungsaufgaben. Dann sollte die Bilddatei im Arbeitsverzeichnis abgelegt werden. In Abb. Abbildung 9.3 zeigt Beispiele für Bilder aus diesem Datensatz.
Wir haben den CIFAR-10-Datensatz bereits im vorherigen Kapitel über Auto-Encoder verwendet und sehen uns diesen Code jetzt noch einmal an. Die folgende Auflistung stammt direkt aus der CIFAR-10-Dokumentation unter
www.cs.toronto.edu/~kriz/cifar.html . Fügen Sie den Code in die Datei cifar_tools.py ein.
Listing 9.1. Laden von Bildern aus einer CIFAR-10-Datei in Python
import pickle def unpickle(file): fo = open(file, 'rb') dict = pickle.load(fo, encoding='latin1') fo.close() return dict
Neuronale Netze neigen zu Umschulungen, daher ist es wichtig, alles zu tun, um diesen Fehler zu minimieren. Vergessen Sie dazu nicht, die Daten vor der Verarbeitung zu bereinigen.
Die Datenbereinigung ist der Hauptprozess der Pipeline für maschinelles Lernen. Der Code in Listing 9.2 verwendet die folgenden drei Schritte, um einen Bildsatz zu bereinigen:
1. Wenn Sie ein Bild in Farbe haben, versuchen Sie, es in Graustufen umzuwandeln, um die Dimensionalität der Eingabedaten und damit die Anzahl der Parameter zu verringern.
2. Denken Sie daran, das Bild in der Mitte zuzuschneiden, da die Bildränder keine nützlichen Informationen liefern.
3. Normalisieren Sie die Eingabe, indem Sie den Mittelwert subtrahieren und durch die Standardabweichung jeder Datenprobe dividieren, damit sich die Gradienten während der Rückausbreitung nicht zu stark ändern.
Die folgende Auflistung zeigt, wie Sie einen Datensatz mit diesen Methoden löschen.
Speichern Sie alle Bilder aus dem CIFAR-10-Dataset und führen Sie die Bereinigungsfunktion aus. Die folgende Auflistung definiert eine bequeme Methode zum Lesen, Bereinigen und Strukturieren von Daten zur Verwendung in TensorFlow. Dort sollten Sie den Code aus der Datei cifar_tools.py einfügen.
Listing 9.3. Vorverarbeitung aller CIFAR-10-Dateien
def read_data(directory): names = unpickle('{}/batches.meta'.format(directory))['label_names'] print('names', names) data, labels = [], [] for i in range(1, 6): filename = '{}/data_batch_{}'.format(directory, i) batch_data = unpickle(filename) if len(data) > 0: data = np.vstack((data, batch_data['data'])) labels = np.hstack((labels, batch_data['labels'])) else: data = batch_data['data'] labels = batch_data['labels'] print(np.shape(data), np.shape(labels)) data = clean(data) data = data.astype(np.float32) return names, data, labels
In der Datei using_cifar.py können Sie die Methode verwenden, indem Sie dazu cifar_tools importieren. Die Listen 9.4 und 9.5 zeigen, wie Sie mehrere Bilder aus einem Datensatz abrufen und visualisieren können.
Listing 9.4. Verwenden der Hilfsfunktion cifar_tools
import cifar_tools names, data, labels = \ cifar_tools.read_data('your/location/to/cifar-10-batches-py')
Sie können beliebig mehrere Bilder auswählen und entsprechend der Beschriftung zeichnen. Die folgende Auflistung macht genau das, damit Sie die Art der Daten, mit denen Sie sich befassen, besser verstehen können.
Wenn Sie diesen Code ausführen, erstellen Sie die Datei cifar_examples.png, die wie in Abb. 1 dargestellt aussieht. 9.3.
»Weitere Informationen zum Buch finden Sie auf
der Website des Herausgebers»
Inhalt»
Auszug20% Rabatt-Gutschein für Straßenhändler -
Maschinelles Lernen