
Deep Learning ist eine Reihe von Algorithmen für maschinelles Lernen, die Abstraktionen auf hoher Ebene in Daten mithilfe von Architekturen modellieren, die aus vielen nichtlinearen Transformationen bestehen. Stimmen Sie zu, dieser Satz klingt bedrohlich. Aber nicht alles ist so beängstigend, wenn Francois Schollay, der Keras, die mächtigste Bibliothek für die Arbeit mit neuronalen Netzen, geschaffen hat, über tiefes Lernen spricht. Erleben Sie tiefes Lernen mit praktischen Beispielen aus den unterschiedlichsten Bereichen. Das Buch ist in zwei Teile gegliedert, der erste enthält die theoretischen Grundlagen, der zweite die Lösung spezifischer Probleme. Auf diese Weise können Sie nicht nur die Grundlagen von DL verstehen, sondern auch lernen, wie Sie neue Möglichkeiten in der Praxis nutzen können. Dieses Buch richtet sich an Personen mit Erfahrung in der R-Programmierung, die sich schnell mit Deep Learning in der Praxis vertraut machen möchten. Es ist eine Zusammenstellung des Bestseller-Buches von Francois Scholl, „Deep Learning in Python“, verwendet jedoch Beispiele, die auf der R-Schnittstelle für Keras basieren.
Über dieses Buch
Das Buch "Deep Learning on R" richtet sich an Statistiker, Analysten, Ingenieure und Studenten, die über Programmierkenntnisse in R verfügen, jedoch keine wesentlichen Kenntnisse auf dem Gebiet des maschinellen und tiefen Lernens besitzen. Dieses Buch ist eine überarbeitete Version eines früheren Buches,
Deep Learning in Python , das Beispiele enthält, die die R-Schnittstelle für Keras verwenden. Der Zweck dieses Buches ist es, der R-Community einen Leitfaden zu geben, der alles enthält, was Sie benötigen, von der Grundtheorie bis zu fortgeschrittenen praktischen Anwendungen. Sie sehen mehr als 30 Beispiele für Programmcode mit detaillierten Kommentaren, praktischen Empfehlungen und einfachen allgemeinen Erklärungen zu allem, was Sie wissen müssen, um Deep Learning zur Lösung spezifischer Probleme einzusetzen.
Die Beispiele verwenden das Keras Deep Learning Framework und die TensorFlow-Bibliothek als internen Mechanismus. Keras ist eines der beliebtesten und am schnellsten wachsenden Deep-Learning-Frameworks. Es wird oft als das erfolgreichste Werkzeug für Anfänger empfohlen, um tiefes Lernen zu lernen. Nachdem Sie dieses Buch gelesen haben, werden Sie verstehen, was Deep Learning ist, um zu lösen, an welchen Problemen diese Technologie beteiligt sein kann und welche Einschränkungen sie aufweist. Sie lernen den Standardprozess zum Interpretieren und Lösen von Problemen des maschinellen Lernens und den Umgang mit allgemeinen Problemen kennen. Sie lernen, wie Sie mit Keras praktische Probleme von der Mustererkennung bis zur Verarbeitung natürlicher Sprache lösen: Bildklassifizierung, Zeitsequenzvorhersage, Emotionsanalyse sowie Bild- und Texterzeugung und vieles mehr.
Auszug. 5.4.1. Visualisierung der Zwischenaktivierung
Die Visualisierung von Zwischenaktivierungen besteht darin, Feature-Maps anzuzeigen, die von verschiedenen Faltungs- und Kombinationsstufen im Netzwerk als Reaktion auf bestimmte Eingabedaten angezeigt werden (Stufenausgabe, das Ergebnis der Aktivierungsfunktion, häufig als Aktivierung bezeichnet). Mit dieser Technik können Sie sehen, wie die Eingabedaten in verschiedene Filter zerlegt werden, die das Netzwerk während des Lernprozesses empfängt. In der Regel werden Feature-Maps mit drei Dimensionen zur Visualisierung verwendet: Breite, Höhe und Tiefe (Farbkanäle). Kanäle codieren relativ unabhängige Merkmale. Um diese Merkmalskarten zu visualisieren, ist es daher vorzuziehen, zweidimensionale Bilder für jeden Kanal separat zu erstellen. Wir beginnen mit dem Laden des in Abschnitt 5.2 gespeicherten Modells:
> library(keras) > model <- load_model_hdf5("cats_and_dogs_small_2.h5") > model________________________________________________________________ Layer (type) Output Shape Param # ============================================================== conv2d_5 (Conv2D) (None, 148, 148, 32) 896 ________________________________________________________________ maxpooling2d_5 (MaxPooling2D) (None, 74, 74, 32) 0 ________________________________________________________________ conv2d_6 (Conv2D) (None, 72, 72, 64) 18496 ________________________________________________________________ maxpooling2d_6 (MaxPooling2D) (None, 36, 36, 64) 0 ________________________________________________________________ conv2d_7 (Conv2D) (None, 34, 34, 128) 73856 ________________________________________________________________ maxpooling2d_7 (MaxPooling2D) (None, 17, 17, 128) 0 ________________________________________________________________ conv2d_8 (Conv2D) (None, 15, 15, 128) 147584 ________________________________________________________________ maxpooling2d_8 (MaxPooling2D) (None, 7, 7, 128) 0 ________________________________________________________________ flatten_2 (Flatten) (None, 6272) 0 ________________________________________________________________ dropout_1 (Dropout) (None, 6272) 0 ________________________________________________________________ dense_3 (Dense) (None, 512) 3211776 ________________________________________________________________ dense_4 (Dense) (None, 1) 513 ================================================================ Total params: 3,453,121 Trainable params: 3,453,121 Non-trainable params: 0
Wählen Sie als Nächstes ein Eingabebild einer Katze aus, die nicht Teil des Trainingssatzes ist.
Listing 5.25. Bildanzeige testen
plot(as.raster(img_tensor[1,,,]))
Um zu visualisierende Feature-Maps zu extrahieren, erstellen Sie ein Keras-Modell, das Bildpakete akzeptiert und die Aktivierung aller Faltungs- und Kombinationsebenen anzeigt. Verwenden Sie dazu die Funktion keras_model aus dem Keras-Framework, die zwei Argumente akzeptiert: den Eingangstensor (oder die Liste der Eingangstensoren) und den Ausgangstensor (oder die Liste der Ausgangstensoren). Das Ergebnis ist ein Keras-Modellobjekt, das den Modellen ähnelt, die von der Funktion keras_sequential_model () zurückgegeben werden, mit der Sie bereits vertraut sind. Dieses Modell ordnet die gegebenen Eingaben den gegebenen Ausgaben zu. Funktionsmodelle
Dieser Typ ist die Möglichkeit, Modelle mit mehreren Ausgaben zu erstellen (im Gegensatz zu keras_sequential_model ()). Die Funktion keras_model wird in Abschnitt 7.1 näher erläutert.
Wenn Sie ein Bild an dieses Modell übergeben, werden die Ebenenaktivierungswerte im Originalmodell zurückgegeben. Dies ist das erste Beispiel für ein Modell mit mehreren Ausgaben in diesem Buch: Bisher haben alle oben vorgestellten Modelle genau eine Eingabe und eine Ausgabe. Im Allgemeinen kann ein Modell eine beliebige Anzahl von Ein- und Ausgängen haben. Insbesondere verfügt dieses Modell über einen Eingang und acht Ausgänge: einen für jede Pegelaktivierung.
Nehmen Sie zum Beispiel die Aktivierung der ersten Faltungsschicht für das Eingabebild einer Katze:
> first_layer_activation <- activations[[1]] > dim(first_layer_activation) [1] 1 148 148 32
Dies ist eine Feature-Map von 148 × 148 mit 32 Kanälen. Versuchen wir, einige davon anzuzeigen. Zunächst definieren wir eine Funktion zur Visualisierung des Kanals.
Listing 5.28. Kanalvisualisierungsfunktion
plot_channel <- function(channel) { rotate <- function(x) t(apply(x, 2, rev)) image(rotate(channel), axes = FALSE, asp = 1, col = terrain.colors(12)) }
Nun zeigen wir den zweiten Aktivierungskanal der ersten Ebene des Originalmodells an (Abb. 5.18). Dieser Kanal scheint einen Schleifendetektor darzustellen.
Listing 5.29. Visualisierung von Kanal 2
plot_channel(first_layer_activation[1,,,2])
Schauen wir uns nun den siebten Kanal an (Abb. 5.19), aber denken Sie daran, dass Ihre Kanäle unterschiedlich sein können, da das Erlernen bestimmter Filter keine deterministische Operation ist. Dieser Kanal ist etwas anders und es sieht so aus, als würde er die Iris der Katze hervorheben.
Listing 5.30. Visualisierung von Kanal 7
plot_channel(first_layer_activation[1,,,7])
Jetzt erstellen wir eine vollständige Visualisierung aller Aktivierungen im Netzwerk (Listing 5.31). Extrahieren und zeigen Sie dazu jeden Kanal in allen acht Aktivierungskarten und platzieren Sie die Ergebnisse in einem größeren Tensor mit Bildern (Abb. 5.20–5.23).
Listing 5.31. Visualisierung aller Kanäle für alle Zwischenaktivierungen
image_size <- 58 images_per_row <- 16 for (i in 1:8) { layer_activation <- activations[[i]] layer_name <- model$layers[[i]]$name n_features <- dim(layer_activation)[[4]] n_cols <- n_features %/% images_per_row png(paste0("cat_activations_", i, "_", layer_name, ".png"), width = image_size * images_per_row, height = image_size * n_cols) op <- par(mfrow = c(n_cols, images_per_row), mai = rep_len(0.02, 4)) for (col in 0:(n_cols-1)) { for (row in 0:(images_per_row-1)) { channel_image <- layer_activation[1,,,(col*images_per_row) + row + 1] plot_channel(channel_image) } } par(op) dev.off() }
Hier einige Kommentare zu den Ergebnissen.
- Die erste Schicht dient als Sammlung verschiedener Schleifendetektoren. Zu diesem Zeitpunkt speichert die Aktivierung fast alle im Originalbild verfügbaren Informationen.
- Wenn Sie die Aktivierungsebenen nach oben verschieben, werden sie abstrakter und ihre visuelle Interpretation wird komplexer. Sie beginnen, übergeordnete Konzepte wie „Katzenohr“ oder „Katzenauge“ zu codieren. Übergeordnete Darstellungen enthalten immer weniger Informationen über das Originalbild und immer mehr über die Klasse des Bildes.
- Die Spärlichkeit der Aktivierungen nimmt mit der Tiefe der Ebene zu: In der ersten Ebene werden alle Filter durch das Originalbild aktiviert, in den folgenden Ebenen gibt es jedoch immer mehr leere Filter. Dies bedeutet, dass das mit dem Filter übereinstimmende Muster im Originalbild nicht gefunden wird.
Wir haben gerade ein wichtiges universelles Merkmal von Darstellungen untersucht, die durch tiefe neuronale Netze erzeugt werden: Merkmale, die durch Schichten extrahiert werden, werden mit der Schichttiefe abstrakter. Aktivierungen in den oberen Ebenen enthalten immer weniger Informationen zu einem bestimmten Eingabebild und immer mehr zum Ziel (in diesem Fall ist die Bildklasse eine Katze oder ein Hund). Ein tiefes neuronales Netzwerk fungiert tatsächlich als Pipeline für die Bereinigung von Informationen, die Rohdaten (in diesem Fall Bilder im RGB-Format) empfangen und mehrere Transformationen durchlaufen, unnötige Informationen filtern (z. B. das spezifische Erscheinungsbild des Bildes) und die richtige (z. B. eine Klasse) verlassen und bereinigen Bilder).
Auf ungefähr die gleiche Weise nehmen Menschen und Tiere die Welt um sich herum wahr: Nachdem eine Person eine Szene einige Sekunden lang beobachtet hat, merkt sie sich, welche abstrakten Objekte darin vorhanden sind (ein Fahrrad, ein Baum), erinnert sich jedoch nicht an alle Details des Aussehens dieser Objekte. Wenn Sie versuchen, ein Fahrrad aus dem Speicher zu zeichnen, erhalten Sie höchstwahrscheinlich kein mehr oder weniger korrektes Bild, obwohl Sie die Fahrräder tausendfach sehen konnten (siehe Beispiele in Abb. 5.24). Versuchen Sie es jetzt, und Sie werden von der Wahrheit des Gesagten überzeugt sein. Ihr Gehirn hat gelernt, das am Eingang empfangene sichtbare Bild vollständig zu abstrahieren und es in visuelle Konzepte auf hoher Ebene umzuwandeln, während unwichtige visuelle Details gefiltert werden, wodurch es schwierig wird, sich an sie zu erinnern.
»Weitere Informationen zum Buch finden Sie auf
der Website des Herausgebers»
Inhalt»
Auszug20% Rabatt-Gutschein für Straßenhändler -
Deep Learning mit R.