Sag Hallo zu: aller Welt des maschinellen Lernens

1. Hinweis

In diesem Codelab lernen Sie die Grundlagen von ML, wobei Sie anstelle der Programmierung expliziter Regeln in einer Sprache wie Java oder C++ ein System entwickeln, das mit Daten trainiert wird, um eine Beziehung zwischen den Zahlen zu ermitteln.

Stellen Sie sich das folgende Problem vor: Sie erstellen ein System, das die Aktivitätserkennung für das Fitness-Tracking ausführt. Möglicherweise können Sie die Geschwindigkeit nutzen, mit der ein Nutzer geht, und seine Aktivität basierend auf dieser Geschwindigkeit anhand einer Bedingung ableiten.

cc3628d9a1547597

if(speed<4){
  status=WALKING;
}

Sie können dies mit einer anderen Bedingung erweitern.

f2cc3929221107b8

if(speed<4){
    status=WALKING;
} else {
    status=RUNNING;
}

In einer letzten Bedingung können Sie ähnlich ermitteln, wie Fahrrad fahren.

aeb282cf03d5cff

if(speed<4){
    status=WALKING;
} else if(speed<12){
    status=RUNNING;
} else {
    status=BIKING;
}

Überlegen Sie, was passiert, wenn Sie eine Aktivität wie Golf einbeziehen möchten. Es ist weniger offensichtlich, wie eine Regel zum Ermitteln der Aktivität erstellt wird.

fc772abb6fee2804

// Now what?

Es ist äußerst schwierig, ein Programm zu erstellen, das die Golfaktivität erkennt. Was machen Sie also? Mit ML können Sie das Problem lösen!

Voraussetzungen

Bevor Sie mit diesem Codelab beginnen, sollten Sie Folgendes wissen:

  • Gute Python-Kenntnisse
  • Grundkenntnisse im Programmieren

Lerninhalte

  • Grundlagen des maschinellen Lernens

Inhalte, die Sie erstellen werden

  • Ihr erstes Modell für maschinelles Lernen

Voraussetzungen

Wenn Sie noch nie ein ML-Modell mit TensorFlow erstellt haben, können Sie Colaboratory verwenden, eine browserbasierte Umgebung, die alle erforderlichen Abhängigkeiten enthält. Sie finden den Code für den Rest des Codelabs, das in Colab ausgeführt wird.

Wenn Sie eine andere IDE verwenden, muss Python installiert sein. Sie benötigen außerdem TensorFlow und die NumPy-Bibliothek. Weitere Informationen zum Installieren von TensorFlow Geben Sie NumPy hier ein.

2. Informationen zu ML

Betrachten Sie die herkömmliche Art der Erstellung von Apps, wie im folgenden Diagramm dargestellt:

c72f871306134e45.png

Sie ausdrücken Regeln in einer Programmiersprache. Sie nutzen Daten und dein Programm bietet Antworten**.** Im Fall der Aktivitätserkennung haben die Regeln (der Code, den Sie zur Definition von Aktivitätstypen geschrieben haben) auf die Daten (die Bewegungsgeschwindigkeit der Person) eine Antwort erzeugt: der Rückgabewert der Funktion zur Bestimmung des Aktivitätsstatus des Nutzers (wenn er z. B. gegangen ist, lauft, Rad fährt oder etwas anderes tut).

Der Prozess der Erkennung des Aktivitätsstatus über ML ist ähnlich, nur die Achsen unterscheiden sich.

9b85a337ee816e1b.png

Anstatt zu versuchen, die Regeln zu definieren und sie in einer Programmiersprache auszudrücken, stellen Sie die Antworten (normalerweise als Labels bezeichnet) sowie die Daten zur Verfügung. Die Maschine bestimmt die Regeln, die die Beziehung zwischen den Antworten und den Daten bestimmen. Im ML-Kontext könnte Ihr Aktivitätserkennungsszenario beispielsweise so aussehen:

6ff58697a85931f4

Sie erfassen viele Daten und kennzeichnen sie mit folgendem Label: Dann kann der Computer anhand der Regeln ableiten, aus welchen Daten die bestimmten Muster eine bestimmte Aktivität kennzeichnen.

Dieser Ansatz ist nicht nur eine Alternative zur Programmierung dieses Szenarios, sondern bietet Ihnen auch die Möglichkeit, neue Szenarien zu eröffnen, z. B. das Golfen, das bei der regelbasierten herkömmlichen Programmierung unter Umständen nicht möglich wäre.

Bei der herkömmlichen Programmierung wird Ihr Code in ein Binärprogramm kompiliert, das in der Regel als Programm bezeichnet wird. In ML wird das Element, das Sie aus den Daten und Labels erstellen, als Modell bezeichnet.

Wenn Sie also zu diesem Diagramm zurückkehren:

53ff9e2cb511936e.png

Das Ergebnis ist ein Modell, das zur Laufzeit wie folgt verwendet wird:

693430bb4d7fa001

Sie übergeben einige Daten an das Modell und das Modell verwendet die Regeln, die es aus dem Training abgeleitet hat, um eine Vorhersage zu treffen, z. B. „Diese Daten sehen zu Fuß aus“ oder „Diese Daten sehen so aus“.

3. Ihr erstes ML-Modell erstellen

Hier ein paar Zahlen: Können Sie die Beziehung zwischen ihnen erkennen?

X:

-1

0

1

2

3

4

Y:

-2

1

4

7

10

13

Dabei stellen Sie fest, dass der Wert von X um 1 steigt, während Sie von links nach rechts lesen, und der entsprechende Wert von Y um 3 steigt. Wahrscheinlich glaubst du, dass y gleich 3 x plus oder minus 3 ist. Wahrscheinlich schauen Sie sich also die 0 an X an und stellen fest, dass Y 1 ist und Sie die Beziehung Y=3X+1 auswerten.

Das ist fast genau so, wie Sie Code verwenden würden, um ein Modell zu trainieren, um die Muster in den Daten zu erkennen!

Sehen Sie sich jetzt den Code an.

Wie würden Sie ein neuronales Netzwerk trainieren, um die entsprechende Aufgabe auszuführen? Datennutzung! Indem du sie mit einem Satz von X's und einem Satz von Y's fütterst, sollte sie die Beziehung zwischen ihnen erkennen können.

Importe

Beginnen Sie mit den Importen. Hier importieren Sie TensorFlow und nennen es tf, um es verwenden zu können.

Als Nächstes importieren Sie eine Bibliothek namens numpy, die Ihre Daten einfach und schnell als Listen darstellt.

Das Framework zum Definieren eines neuronalen Netzwerks als Gruppe von sequenziellen Ebenen wird als keras bezeichnet. Importieren Sie das ebenfalls.

import tensorflow as tf
import numpy as np
from tensorflow import keras

Das neuronale Netzwerk definieren und kompilieren

Als Nächstes erstellen Sie das geringstmögliche neuronale Netzwerk. Sie hat eine Ebene, diese Ebene hat ein Neuron und die Eingabeform hat nur einen Wert.

model = tf.keras.Sequential([keras.layers.Dense(units=1, input_shape=[1])])

Schreiben Sie als Nächstes den Code, um Ihr neuronales Netzwerk zu kompilieren. Dazu müssen Sie zwei Funktionen angeben: loss und optimizer.

In diesem Beispiel wissen Sie, dass die Beziehung zwischen den Zahlen Y=3X + 1 ist.

Wenn der Computer versucht, das zu lernen, macht er eine Schätzung, zum Beispiel Y=10X+10. Mit der Funktion loss werden die erratenen Antworten anhand der bekannten richtigen Antworten gemessen und die Ergebnisse bewertet.

Als Nächstes verwendet das Modell die Funktion optimizer, um eine weitere Schätzung zu erstellen. Je nach Ergebnis der Ergebnisunterdrückung wird versucht, den Verlust so gering wie möglich zu halten. An diesem Punkt sieht es möglicherweise so aus: Y=5X+5. Das ist immer noch nicht gut, aber es kommt näher an dem richtigen Ergebnis (der Verlust ist geringer).

Das Modell wiederholt dies für die Anzahl der Epochen, die Ihnen bald angezeigt werden.

Als Erstes hier die Anleitung zur Verwendung von mean_squared_error für den Verlust und stochastischen Gradientenabstieg (sgd) für den Optimierer. Du musst all diese Berechnungen aber nicht verstehen, aber sie werden sehen, dass sie funktionieren.

Im Laufe der Zeit lernen Sie verschiedene Funktionen für verschiedene Szenarien kennen.

model.compile(optimizer='sgd', loss='mean_squared_error')

Daten bereitstellen

Geben Sie als Nächstes ein paar Daten ein. In diesem Fall verwenden Sie die sechs X- und sechs Y-Variablen zuvor. Die Beziehung zwischen diesen ist Y = 3X + 1, wobei X also „-1“ und Y „-2“ ist.

Eine Python-Bibliothek mit dem Namen „NumPy“ bietet sehr viele Array-Datenstrukturen. Geben Sie die Werte als Array in NumPy mit np.array[] an.

xs = np.array([-1.0, 0.0, 1.0, 2.0, 3.0, 4.0], dtype=float)
ys = np.array([-2.0, 1.0, 4.0, 7.0, 10.0, 13.0], dtype=float)

Jetzt haben Sie den gesamten Code, den Sie benötigen, um das neuronale Netzwerk zu definieren. Als Nächstes sollten Sie sie trainieren, um festzustellen, ob sie die Muster zwischen diesen Zahlen ableiten und zum Erstellen eines Modells verwenden können.

4. neuronales Netzwerk trainieren

Beim Trainieren des neuronalen Netzwerks, das die Beziehung zwischen X und Y erkennt, wird der Aufruf model.fit ausgeführt. Sie durchläuft die Schleife, bevor sie eine Vermutung annimmt, um zu messen, wie gut oder schlecht sie ist (Verlust). Sie kann aber auch mit dem Optimierungstool eine weitere Schätzung treffen. Das gilt für die festgelegte Anzahl von Epochen. Wenn Sie diesen Code ausführen, wird der Verlust für jede Epoche ausgedruckt.

model.fit(xs, ys, epochs=500)

Sie können beispielsweise sehen, dass der Verlustwert in den ersten paar Epochen recht groß ist, aber mit jedem Schritt immer kleiner wird.

f110d5abed07c1b9.png

Mit dem Verlauf des Trainings wird der Verlust sehr gering.

81ca5e71298b414b.png

Wenn das Training abgeschlossen ist, ist der Verlust sehr gering. Das zeigt, dass unser Modell die Beziehung zwischen den Zahlen sehr gut abbildet.

12b187014b639fd

Du brauchst wahrscheinlich nicht alle 500 Epochen und kannst verschiedene Beträge ausprobieren. Wie Sie an diesem Beispiel sehen können, ist der Verlust nach 50 Epochen wirklich klein. Es reicht also aus.

5. Modell verwenden

Sie haben ein Modell, das trainiert wurde, die Beziehung zwischen X und Y zu verstehen. Sie können die Methode model.predict verwenden, um Y für ein zuvor unbekanntes X zu finden. Wenn X gleich 10 ist, was ist dann Y? Lassen Sie sich raten, bevor Sie den folgenden Code ausführen:

print(model.predict([10.0]))

Vielleicht hättest du vielleicht schon 31 gedacht, aber es ist auch schon etwas zu lang. Was könnte der Grund sein?

In neuronalen Netzwerken werden Wahrscheinlichkeiten verarbeitet. Daher wurde berechnet, dass die Beziehung zwischen X und Y Y=3X + 1 ist. Allerdings ist dies mit nur sechs Datenpunkten sicher nicht möglich. Das Ergebnis liegt sehr nahe bei 31, aber nicht unbedingt auf 31.

Wenn Sie mit neuronalen Netzwerken arbeiten, sehen Sie dieses Muster wiederkehrend. Sie werden fast immer mit Wahrscheinlichkeiten umgehen, nicht mit Gewissheit und ein wenig Codierung vornehmen, um das Ergebnis auf Grundlage der Wahrscheinlichkeiten zu ermitteln, insbesondere bei der Klassifizierung.

6. Glückwunsch

Ob Sie es glauben oder nicht: Sie haben die meisten Konzepte in ML abgedeckt, die Sie in komplexeren Szenarien einsetzen. Wenn Sie ein Netzwerk definieren, können Sie die Beziehung zwischen zwei Gruppen von Zahlen ermitteln. Sie haben eine Gruppe von Ebenen definiert (in diesem Fall nur eine), die Neuronen enthält (in diesem Fall nur eine), die Sie dann mit einer Verlustfunktion und einem Optimierer kompilieren.

Die Netzwerkbildung, die Verlustfunktion und der Optimierungstool helfen Ihnen, die Beziehung zwischen den Zahlen zu erraten, ihre Leistung zu beurteilen und neue Parameter für neue Zahlen zu generieren. Weitere Informationen finden Sie auf TensorFlow.org.

Weitere Informationen

Informationen dazu, wie Sie mit ML und TensorFlow Ihre Modelle für maschinelles Sehen verbessern können, finden Sie in diesem Hilfeartikel.