Das Buch "Maschinelles Lernen und TensorFlow"

    BildDie Bekanntschaft mit dem maschinellen Lernen und der TensorFlow-Bibliothek ähnelt den ersten Lektionen in einer Fahrschule. Wenn Sie unter Parallelparken leiden und versuchen, zur richtigen Zeit die Ausrüstung zu wechseln und die Spiegel nicht zu verwirren, erinnern Sie sich fieberhaft an die Reihenfolge der Aktionen, während Ihr Bein nervös an den Gaspedalen zuckt. Dies ist eine schwierige, aber notwendige Übung. Das gilt auch für das maschinelle Lernen: Bevor Sie moderne Gesichtserkennungssysteme oder Prognosealgorithmen an der Börse einsetzen, müssen Sie sich mit den entsprechenden Tools und Anweisungssätzen beschäftigen, um problemlos eigene Systeme erstellen zu können.

    Neulinge im Bereich des maschinellen Lernens werden den Fokus dieses Buches zu schätzen wissen, da es das Ziel ist, die Grundlagen vorzustellen, damit sie sich schnell mit der Lösung echter Probleme befassen können. Anhand eines Überblicks über die Konzepte des maschinellen Lernens und der Arbeitsweise von TensorFlow werden die grundlegenden Algorithmen erläutert, neuronale Netzwerke untersucht und die Probleme der Klassifizierung, Clusterbildung, Regression und Vorhersage unabhängig voneinander gelöst.

    Auszug Faltungsneuralnetze


    In den Geschäften nach einem anstrengenden Tag einzukaufen, ist eine sehr lästige Aufgabe. Meine Augen werden von zu vielen Informationen angegriffen. Verkäufe, Gutscheine, verschiedene Farben, kleine Kinder, funkelnde Lichter und mit Menschen gefüllte Gänge sind nur einige Beispiele für alle Signale, die an den visuellen Kortex gesendet werden, unabhängig davon, ob ich darauf achten möchte oder nicht. Das visuelle System absorbiert eine Fülle von Informationen.

    Sicher kennen Sie den Satz "einmal besser sehen als hundertmal hören". Dies kann für Sie und für mich zutreffen (dh für Menschen), aber kann die Maschine in den Bildern einen Sinn finden? Unsere visuellen Fotorezeptoren wählen die Wellenlänge des Lichts aus, aber diese Informationen scheinen sich nicht auf unser Bewusstsein zu erstrecken. Am Ende kann ich nicht genau sagen, was die Länge der Lichtwellen ist. Ebenso empfängt die Kamera Bildpixel. Stattdessen möchten wir etwas Höheres erhalten, etwa die Namen oder Positionen von Objekten. Wie erhalten wir Informationen aus den auf menschlicher Ebene wahrgenommenen Pixeln?

    Um die Quelldaten zu verstehen, müssen Sie ein Modell eines neuronalen Netzwerks entwerfen. In den vorangegangenen Kapiteln wurden verschiedene Typen von neuronalen Netzwerkmodellen eingeführt, z. B. vollständig verbundene Modelle (Kapitel 8) und Auto-Encoder (Kapitel 7). In diesem Kapitel stellen wir einen anderen Modelltyp vor, der als Faltungsneurales Netzwerk (CNN) bezeichnet wird. Dieses Modell eignet sich hervorragend für Bilder und andere sensorische Daten wie beispielsweise Ton. Ein CNN-Modell kann beispielsweise zuverlässig klassifizieren, welches Objekt in einem 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 „das Bild besser als nur ein Wort“, da wir nur 10 mögliche Optionen haben. Dies ist ein kleiner Schritt in Richtung Wahrnehmung auf menschlicher Ebene, aber wir müssen mit etwas beginnen, richtig?

    9.1. Nachteile neuronaler Netze


    Maschinelles Lernen ist ein ewiger Kampf um die Entwicklung eines Modells, das für die Darstellung von Daten ausreichend aussagekräftig ist. Gleichzeitig war es jedoch nicht so allgemein, dass es zu Umschulungs- und Erinnerungsmustern kam. Neuronale Netze werden als Möglichkeit zur Steigerung der Ausdruckskraft angeboten. Wie Sie sich vorstellen können, leiden sie jedoch stark unter Umschulungsfallen.

    HINWEIS Übertraining tritt auf, wenn ein trainiertes Modell für einen Trainingsdatensatz außergewöhnlich genau und für einen Testdatensatz schlecht ist. Dieses Modell ist wahrscheinlich für die geringe Datenmenge zu universell, und am Ende speichert es nur die Trainingsdaten.

    Um die Vielseitigkeit der beiden Machine Learning-Modelle 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 davon ausgegangen werden, dass ein vollständig verbundenes neuronales Netzwerk komplexere Daten darstellen kann als ein Modell mit fünf Parametern.

    Bild

    Im folgenden Abschnitt werden neuronale Faltungsnetzwerke beschrieben, die eine sinnvolle Möglichkeit darstellen, die Anzahl der Parameter zu reduzieren. Anstatt sich in vollständig verbundenen Netzwerken zu engagieren, verwendet CNN dieselben Parameter wiederholt.

    9.2. Faltungsneuralnetze


    Der Grundgedanke der konvolutionellen neuronalen Netze ist, dass das lokale Verständnis des Bildes ausreichend ist. Der praktische Vorteil von neuronalen Faltungsnetzen ist, dass mit mehreren Parametern die Trainingszeit und die zum Trainieren des Modells erforderliche Datenmenge erheblich reduziert werden können.

    Anstelle von vollständig verbundenen Netzwerken mit Gewichtungen von jedem Pixel verfügt CNN über eine ausreichende Anzahl von Gewichtungen, um einen kleinen Teil des Bildes anzuzeigen. Es ist, als würde man mit einem Vergrößerungsglas ein Buch lesen: Am Ende liest man die gesamte Seite, schaut aber immer nur ein kleines Stück davon an.

    Stellen Sie sich ein 256 × 256-Bild vor: Statt den TensorFlow-Code zu verwenden, der das gesamte Bild auf einmal verarbeitet, können Sie ein Bildfragment nach Fragment scannen, beispielsweise ein 5 × 5-Fenster. Ein 5 × 5-Fenster gleitet durch das Bild (normalerweise von links nach rechts und von oben nach unten) gezeigt in Abb. 9.2. Wie schnell es gleitet, wird als Schrittlänge bezeichnet. Schritt 2 bedeutet beispielsweise, dass sich ein 5 × 5-Schiebefenster um jeweils 2 Pixel bewegt, bis das gesamte Bild vorüber ist. Wie in Kürze gezeigt, können Sie in TensorFlow die Schrittlänge und die Fenstergröße mithilfe der integrierten Funktionsbibliothek anpassen.

    Bild

    Diesem 5 × 5-Fenster ist eine 5 × 5-Gewichtsmatrix zugeordnet.

    DEFINITION Eine Faltung ist eine gewichtete Summation der Bildpixelintensitätswerte, wenn das Fenster das gesamte Bild durchläuft. Es stellt sich heraus, dass dieser Vorgang des Faltens eines Bildes mit einer Gewichtungsmatrix ein anderes Bild (von gleicher Größe, abhängig von der Faltung) erzeugt. Koagulation ist der Prozess der Anwendung der Faltung.

    Alle Manipulationen des Schiebefensters treten in der Faltungsschicht des neuronalen Netzwerks auf. Ein typisches neuronales Faltungsnetz weist mehrere Faltungsschichten auf. Jede Faltungsschicht erzeugt normalerweise viele zusätzliche Windungen, daher ist die Matrix der Gewichtungskoeffizienten ein 5 × 5 × n-Tensor, wobei n die Anzahl der Windungen ist.

    Lassen Sie das Bild beispielsweise durch eine Faltungsschicht mit einer Matrix aus 5 × 5 × 64 großen Gewichtungskoeffizienten laufen, wodurch durch Verschieben eines Fensters von 5 × 5 64 Windungen erzeugt werden. Daher verfügt das entsprechende Modell über 5 × 5 × 64 = 1600 Parameter, was deutlich weniger Parameter als ein vollständig verbundenes Netzwerk : 256 × 256 = 65.536.

    Die Attraktivität von Faltungsneuralnetzen (CNN) besteht darin, dass die Anzahl der vom Modell verwendeten Parameter nicht von der Größe des Originalbilds abhängt. Sie können dasselbe Faltungsneuralnetzwerk mit Bildern von 300 × 300 ausführen, und die Anzahl der Parameter in der Faltungsschicht ändert sich nicht!

    9.3. Bildvorbereitung


    Bevor Sie das CNN-Modell mit TensorFlow verwenden, müssen wir einige Bilder vorbereiten. Die Listen 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 in 10 Kategorien verteilt sind. Dies ist eine ausreichend große Ressource für Klassifizierungsaufgaben. Dann sollte die Image-Datei im Arbeitsverzeichnis abgelegt werden. In fig. 9.3 zeigt Beispiele für Bilder aus diesem Datensatz.

    Wir haben den CIFAR-10-Datensatz bereits im vorigen Kapitel zu Auto-Encodern verwendet, und wir werden uns jetzt diesen Code noch einmal ansehen. Die folgende Auflistung stammt direkt aus der CIFAR-10-Dokumentation auf der Website.www.cs.toronto.edu/~kriz/cifar.html . Fügen Sie den Code in die Datei cifar_tools.py ein.

    Bild

    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 zur Umschulung, daher ist es wichtig, alles zu tun, um diesen Fehler zu minimieren. Vergessen Sie nicht, vor der Verarbeitung eine Datenbereinigung durchzuführen.

    Datenbereinigung ist der Hauptprozess von Machine Learning Pipelines. Der Code in Listing 9.2 zum Reinigen eines Bildsatzes umfasst die folgenden drei Schritte:

    1. Wenn Sie ein Bild in Farbe haben, versuchen Sie es in Graustufen zu konvertieren, um die Größe der Eingabedaten und damit die Anzahl der Parameter zu reduzieren.

    2. Ziehen Sie in Betracht, das Bild in der Mitte zu beschneiden, da die Bildränder keine nützlichen Informationen enthalten.

    3. Normalisieren Sie die Eingabedaten, indem Sie den Durchschnitt subtrahieren und durch die Standardabweichung jedes Datenmusters dividieren, sodass sich die Gradienten während der Rückwärtsausbreitung nicht zu dramatisch ändern.

    Die folgende Auflistung zeigt, wie ein Dataset mit diesen Methoden gelöscht wird.

    Bild

    Speichern Sie alle Bilder aus dem CIFAR-10-Datensatz und führen Sie die Clear-Funktion aus. Die folgende Auflistung definiert eine bequeme Methode zum Lesen, Reinigen und Strukturieren von Daten zur Verwendung in TensorFlow. Dort sollte auch der Code aus der Datei cifar_tools.py enthalten sein.

    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 Auflistungen 9.4 und 9.5 zeigen, wie Sie mehrere Bilder aus einem Datensatz auswählen 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 mehrere Bilder nach dem Zufallsprinzip 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.

    Bild

    Wenn Sie diesen Code ausführen, erstellen Sie eine Datei cifar_examples.png, die wie pic aussieht. 9.3.

    »Weitere Informationen zum Buch finden Sie auf der Website des Herausgebers
    » Inhaltsverzeichnis
    » Fragment

    For Habrozhiteley 20% Rabatt auf den Coupon - Machine Learning

    Jetzt auch beliebt: